denko 0.13.6 → 0.15.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (499) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/{build_avr.yml → build_atmega_avr.yml} +19 -18
  3. data/.github/workflows/{build_megaavr.yml → build_atmega_megaavr.yml} +19 -18
  4. data/.github/workflows/{build_sam3x.yml → build_atsam3x.yml} +18 -17
  5. data/.github/workflows/{build_samd.yml → build_atsamd21.yml} +19 -18
  6. data/.github/workflows/build_esp32.yml +19 -18
  7. data/.github/workflows/build_esp32c3.yml +58 -0
  8. data/.github/workflows/build_esp32c6.yml +59 -0
  9. data/.github/workflows/build_esp32h2.yml +58 -0
  10. data/.github/workflows/build_esp32s2.yml +59 -0
  11. data/.github/workflows/build_esp32s3.yml +59 -0
  12. data/.github/workflows/build_esp8266.yml +16 -15
  13. data/.github/workflows/build_ra4m1.yml +17 -16
  14. data/.github/workflows/build_rp2040.yml +19 -17
  15. data/.github/workflows/ruby.yml +20 -20
  16. data/CHANGELOG.md +398 -11
  17. data/DEPS_CLI.md +16 -16
  18. data/DEPS_IDE.md +39 -39
  19. data/MICROCONTROLLERS.md +103 -0
  20. data/PERIPHERALS.md +178 -0
  21. data/README.md +73 -58
  22. data/Rakefile +1 -1
  23. data/build +1 -1
  24. data/denko.gemspec +11 -3
  25. data/lib/denko/analog_io/ads1100.rb +127 -0
  26. data/lib/denko/analog_io/ads1115.rb +8 -25
  27. data/lib/denko/analog_io/ads1118.rb +12 -27
  28. data/lib/denko/analog_io/ads111x.rb +39 -21
  29. data/lib/denko/analog_io/input.rb +29 -55
  30. data/lib/denko/analog_io/input_helper.rb +42 -0
  31. data/lib/denko/analog_io/joystick.rb +87 -0
  32. data/lib/denko/analog_io/output.rb +5 -5
  33. data/lib/denko/analog_io/potentiometer.rb +3 -9
  34. data/lib/denko/analog_io.rb +22 -7
  35. data/lib/denko/behaviors/board_proxy.rb +13 -1
  36. data/lib/denko/behaviors/bus_controller.rb +3 -1
  37. data/lib/denko/behaviors/bus_controller_addressed.rb +1 -0
  38. data/lib/denko/behaviors/bus_peripheral.rb +3 -4
  39. data/lib/denko/behaviors/bus_peripheral_addressed.rb +8 -6
  40. data/lib/denko/behaviors/callbacks.rb +18 -14
  41. data/lib/denko/behaviors/component.rb +12 -14
  42. data/lib/denko/behaviors/input_pin.rb +14 -15
  43. data/lib/denko/behaviors/lifecycle.rb +51 -0
  44. data/lib/denko/behaviors/listener.rb +9 -3
  45. data/lib/denko/behaviors/multi_pin.rb +22 -20
  46. data/lib/denko/behaviors/output_pin.rb +9 -4
  47. data/lib/denko/behaviors/poller.rb +11 -2
  48. data/lib/denko/behaviors/reader.rb +109 -21
  49. data/lib/denko/behaviors/single_pin.rb +3 -4
  50. data/lib/denko/behaviors/state.rb +24 -13
  51. data/lib/denko/behaviors/subcomponents.rb +72 -12
  52. data/lib/denko/behaviors/threaded.rb +19 -8
  53. data/lib/denko/behaviors.rb +36 -22
  54. data/lib/denko/board/core.rb +36 -18
  55. data/lib/denko/board/eeprom.rb +1 -1
  56. data/lib/denko/board/i2c.rb +15 -15
  57. data/lib/denko/board/i2c_bit_bang.rb +53 -0
  58. data/lib/denko/board/infrared.rb +6 -6
  59. data/lib/denko/board/led_array.rb +6 -5
  60. data/lib/denko/board/map.rb +6 -2
  61. data/lib/denko/board/one_wire.rb +3 -3
  62. data/lib/denko/board/spi.rb +35 -30
  63. data/lib/denko/board/spi_bit_bang.rb +14 -15
  64. data/lib/denko/board.rb +41 -36
  65. data/lib/denko/connection/binary_echo.rb +17 -0
  66. data/lib/denko/connection/flow_control.rb +12 -16
  67. data/lib/denko/connection/handshake.rb +2 -0
  68. data/lib/denko/connection/serial.rb +5 -5
  69. data/lib/denko/digital_io/button.rb +4 -0
  70. data/lib/denko/digital_io/c_bit_bang.rb +15 -0
  71. data/lib/denko/digital_io/input.rb +4 -5
  72. data/lib/denko/digital_io/output.rb +19 -10
  73. data/lib/denko/digital_io/pcf8574.rb +114 -0
  74. data/lib/denko/digital_io/relay.rb +2 -0
  75. data/lib/denko/digital_io/rotary_encoder.rb +83 -61
  76. data/lib/denko/digital_io.rb +24 -5
  77. data/lib/denko/display/canvas.rb +350 -157
  78. data/lib/denko/display/font/bmp_5x7.rb +142 -0
  79. data/lib/denko/display/font/bmp_6x8.rb +142 -0
  80. data/lib/denko/display/font/bmp_8x16.rb +141 -0
  81. data/lib/denko/display/font.rb +22 -0
  82. data/lib/denko/display/hd44780.rb +152 -105
  83. data/lib/denko/display/il0373.rb +186 -0
  84. data/lib/denko/display/mono_oled.rb +193 -0
  85. data/lib/denko/display/pcd8544.rb +154 -0
  86. data/lib/denko/display/pixel_common.rb +83 -0
  87. data/lib/denko/display/sh1106.rb +38 -0
  88. data/lib/denko/display/sh1107.rb +10 -0
  89. data/lib/denko/display/spi_common.rb +35 -0
  90. data/lib/denko/display/spi_epaper_common.rb +30 -0
  91. data/lib/denko/display/ssd1306.rb +6 -168
  92. data/lib/denko/display/ssd1680.rb +14 -0
  93. data/lib/denko/display/ssd1681.rb +8 -0
  94. data/lib/denko/display/ssd168x.rb +227 -0
  95. data/lib/denko/display/st7302.rb +207 -0
  96. data/lib/denko/display/st7565.rb +166 -0
  97. data/lib/denko/display.rb +40 -3
  98. data/lib/denko/eeprom/at24c.rb +67 -0
  99. data/lib/denko/eeprom/board.rb +69 -0
  100. data/lib/denko/eeprom.rb +15 -1
  101. data/lib/denko/helpers/engine_check.rb +13 -0
  102. data/lib/denko/helpers/mutex_stub.rb +13 -0
  103. data/lib/denko/helpers.rb +6 -0
  104. data/lib/denko/i2c/bit_bang.rb +32 -0
  105. data/lib/denko/i2c/bus.rb +8 -36
  106. data/lib/denko/i2c/bus_common.rb +50 -0
  107. data/lib/denko/i2c/peripheral.rb +32 -19
  108. data/lib/denko/i2c.rb +17 -2
  109. data/lib/denko/led/apa102.rb +42 -30
  110. data/lib/denko/led/base.rb +13 -2
  111. data/lib/denko/led/rgb.rb +18 -14
  112. data/lib/denko/led/seven_segment.rb +24 -9
  113. data/lib/denko/led/ws2812.rb +10 -7
  114. data/lib/denko/led.rb +17 -8
  115. data/lib/denko/message.rb +5 -0
  116. data/lib/denko/motor/{stepper.rb → a3967.rb} +12 -15
  117. data/lib/denko/motor/l298.rb +11 -10
  118. data/lib/denko/motor/servo.rb +37 -15
  119. data/lib/denko/motor.rb +16 -3
  120. data/lib/denko/one_wire/bus.rb +31 -23
  121. data/lib/denko/one_wire/bus_enumerator.rb +25 -14
  122. data/lib/denko/one_wire/helper.rb +4 -2
  123. data/lib/denko/one_wire/peripheral.rb +0 -3
  124. data/lib/denko/one_wire.rb +18 -5
  125. data/lib/denko/pulse_io/buzzer.rb +11 -9
  126. data/lib/denko/pulse_io/{ir_transmitter.rb → ir_output.rb} +6 -5
  127. data/lib/denko/pulse_io/pwm_output.rb +94 -15
  128. data/lib/denko/pulse_io.rb +17 -3
  129. data/lib/denko/rtc/ds3231.rb +13 -14
  130. data/lib/denko/rtc.rb +14 -1
  131. data/lib/denko/sensor/aht.rb +35 -38
  132. data/lib/denko/sensor/bme280.rb +76 -92
  133. data/lib/denko/sensor/bmp180.rb +46 -48
  134. data/lib/denko/sensor/dht.rb +34 -7
  135. data/lib/denko/sensor/ds18b20.rb +41 -34
  136. data/lib/denko/sensor/hcsr04.rb +7 -5
  137. data/lib/denko/sensor/hdc1080.rb +174 -0
  138. data/lib/denko/sensor/helper.rb +37 -0
  139. data/lib/denko/sensor/htu21d.rb +57 -57
  140. data/lib/denko/sensor/htu31d.rb +36 -36
  141. data/lib/denko/sensor/jsnsr04t.rb +49 -0
  142. data/lib/denko/sensor/qmp6988.rb +34 -48
  143. data/lib/denko/sensor/rcwl9620.rb +3 -5
  144. data/lib/denko/sensor/sht3x.rb +27 -24
  145. data/lib/denko/sensor/sht4x.rb +125 -0
  146. data/lib/denko/sensor/vl53l0x.rb +58 -0
  147. data/lib/denko/sensor.rb +33 -16
  148. data/lib/denko/spi/base_register.rb +25 -21
  149. data/lib/denko/spi/bit_bang.rb +17 -51
  150. data/lib/denko/spi/bus.rb +15 -29
  151. data/lib/denko/spi/bus_common.rb +33 -0
  152. data/lib/denko/spi/input_register.rb +37 -31
  153. data/lib/denko/spi/output_register.rb +33 -39
  154. data/lib/denko/spi/peripheral.rb +81 -14
  155. data/lib/denko/spi.rb +21 -6
  156. data/lib/denko/uart/bit_bang.rb +7 -30
  157. data/lib/denko/uart/common.rb +33 -0
  158. data/lib/denko/uart/hardware.rb +10 -34
  159. data/lib/denko/uart.rb +16 -2
  160. data/lib/denko/version.rb +1 -1
  161. data/lib/denko.rb +23 -16
  162. data/lib/denko_cli/generator.rb +2 -2
  163. data/lib/denko_cli/packages.rb +8 -10
  164. data/lib/denko_cli/targets.rb +13 -13
  165. data/lib/denko_cli/targets.txt +23 -24
  166. data/lib/denko_cli/usage.txt +1 -1
  167. data/src/denko_ethernet.ino +0 -14
  168. data/src/denko_serial.ino +0 -14
  169. data/src/denko_wifi.ino +6 -15
  170. data/src/lib/Denko.cpp +65 -16
  171. data/src/lib/Denko.h +46 -30
  172. data/src/lib/DenkoCoreIO.cpp +57 -102
  173. data/src/lib/DenkoDefines.h +32 -46
  174. data/src/lib/DenkoI2C.cpp +54 -45
  175. data/src/lib/DenkoI2CBB.cpp +238 -0
  176. data/src/lib/DenkoIROut.cpp +12 -7
  177. data/src/lib/DenkoLEDArray.cpp +29 -13
  178. data/src/lib/DenkoSPI.cpp +36 -33
  179. data/src/lib/DenkoSPIBB.cpp +19 -20
  180. data/target.yml +37 -2
  181. data/test/analog_io/input_test.rb +1 -1
  182. data/test/analog_io/potentiometer_test.rb +12 -12
  183. data/test/behaviors/board_proxy_test.rb +1 -1
  184. data/test/behaviors/bus_peripheral_test.rb +4 -4
  185. data/test/behaviors/callbacks_test.rb +28 -10
  186. data/test/behaviors/component_test.rb +32 -14
  187. data/test/behaviors/input_pin_test.rb +14 -9
  188. data/test/behaviors/multi_pin_test.rb +14 -4
  189. data/test/behaviors/output_pin_test.rb +11 -8
  190. data/test/behaviors/poller_test.rb +1 -0
  191. data/test/behaviors/reader_test.rb +3 -2
  192. data/test/behaviors/subcomponents_test.rb +22 -2
  193. data/test/board/board_test.rb +9 -9
  194. data/test/board/core_test.rb +15 -11
  195. data/test/board/i2c_test.rb +39 -33
  196. data/test/board/infrared_test.rb +1 -1
  197. data/test/board/message_test.rb +17 -11
  198. data/test/board/one_wire_test.rb +25 -14
  199. data/test/board/spi_test.rb +45 -29
  200. data/test/digital_io/button_test.rb +15 -0
  201. data/test/digital_io/input_test.rb +2 -2
  202. data/test/digital_io/relay_test.rb +18 -0
  203. data/test/digital_io/rotary_encoder_test.rb +80 -60
  204. data/test/display/canvas_test.rb +306 -0
  205. data/test/display/hd44780_test.rb +34 -7
  206. data/test/eeprom/board_test.rb +45 -0
  207. data/test/helpers/mruby_minitest.rb +95 -0
  208. data/test/helpers/mruby_runner.rb +13 -0
  209. data/test/i2c/bus_test.rb +108 -29
  210. data/test/i2c/peripheral_test.rb +38 -19
  211. data/test/led/apa102_test.rb +24 -0
  212. data/test/led/base_test.rb +2 -1
  213. data/test/led/rgb_test.rb +9 -9
  214. data/test/led/seven_segment_test.rb +7 -7
  215. data/test/motor/{stepper_test.rb → a3967_test.rb} +4 -4
  216. data/test/motor/servo_test.rb +1 -1
  217. data/test/one_wire/bus_enumerator_test.rb +1 -1
  218. data/test/one_wire/bus_test.rb +43 -35
  219. data/test/one_wire/peripheral_test.rb +5 -17
  220. data/test/pulse_io/buzzer_test.rb +7 -4
  221. data/test/pulse_io/{ir_transmitter_test.rb → ir_output_test.rb} +15 -10
  222. data/test/pulse_io/pwm_output_test.rb +74 -18
  223. data/test/rtc/ds3231_test.rb +13 -14
  224. data/test/sensor/dht_test.rb +12 -12
  225. data/test/sensor/ds18b20_test.rb +4 -8
  226. data/test/spi/bitbang_test.rb +27 -0
  227. data/test/spi/bus_test.rb +24 -34
  228. data/test/spi/input_register_test.rb +17 -17
  229. data/test/spi/output_register_test.rb +10 -28
  230. data/test/spi/peripheral_test.rb +73 -0
  231. data/test/test_helper.rb +44 -121
  232. data/vendor/board-maps/BoardMap.h +678 -54
  233. data/vendor/board-maps/lib/header_parser.rb +12 -2
  234. data/vendor/board-maps/yaml/ADAFRUIT_CAMERA_ESP32S3.yml +2 -2
  235. data/vendor/board-maps/yaml/ADAFRUIT_FEATHER_ESP32C6.yml +15 -0
  236. data/vendor/board-maps/yaml/ADAFRUIT_FEATHER_ESP32_V2.yml +1 -1
  237. data/vendor/board-maps/yaml/ADAFRUIT_FEATHER_RP2040_ADALOGGER.yml +44 -0
  238. data/vendor/board-maps/yaml/ADAFRUIT_QTPY_ESP32C3.yml +1 -0
  239. data/vendor/board-maps/yaml/ADAFRUIT_QTPY_ESP32S2.yml +1 -0
  240. data/vendor/board-maps/yaml/ADAFRUIT_QTPY_ESP32S3_N4R2.yml +1 -0
  241. data/vendor/board-maps/yaml/ADAFRUIT_QTPY_ESP32S3_NOPSRAM.yml +1 -0
  242. data/vendor/board-maps/yaml/ADAFRUIT_QTPY_ESP32_PICO.yml +1 -0
  243. data/vendor/board-maps/yaml/ALFREDO_NOU3.yml +2 -0
  244. data/vendor/board-maps/yaml/AMKEN_BB.yml +48 -0
  245. data/vendor/board-maps/yaml/AMKEN_ES.yml +48 -0
  246. data/vendor/board-maps/yaml/AMKEN_REVELOP.yml +48 -0
  247. data/vendor/board-maps/yaml/AMKEN_REVELOP_PLUS.yml +48 -0
  248. data/vendor/board-maps/yaml/ASL_CAN_X2.yml +41 -0
  249. data/vendor/board-maps/yaml/ATD143_S3.yml +1 -0
  250. data/vendor/board-maps/yaml/BHARATPI_A7672S_4G.yml +14 -0
  251. data/vendor/board-maps/yaml/BHARATPI_LORA.yml +14 -0
  252. data/vendor/board-maps/yaml/BHARATPI_NODE_WIFI.yml +14 -0
  253. data/vendor/board-maps/yaml/BLING.yml +25 -0
  254. data/vendor/board-maps/yaml/BRIDGETEK_IDM2040_7A.yml +48 -0
  255. data/vendor/board-maps/yaml/Bee_Motion_Mini.yml +13 -1
  256. data/vendor/board-maps/yaml/Breadstick_Raspberry.yml +31 -0
  257. data/vendor/board-maps/yaml/CEZERIO_DEV_ESP32C6.yml +14 -0
  258. data/vendor/board-maps/yaml/CEZERIO_MINI_DEV_ESP32C6.yml +12 -0
  259. data/vendor/board-maps/yaml/CIRCUITART_ZERO_S3.yml +71 -0
  260. data/vendor/board-maps/yaml/CODECELLC3.yml +13 -0
  261. data/vendor/board-maps/yaml/CYOBOT_V2_ESP32S3.yml +7 -0
  262. data/vendor/board-maps/yaml/DFROBOT_BEETLE_ESP32C6.yml +8 -0
  263. data/vendor/board-maps/yaml/DFROBOT_FIREBEETLE_2_ESP32C6.yml +20 -0
  264. data/vendor/board-maps/yaml/DFROBOT_FIREBEETLE_ESP32.yml +46 -0
  265. data/vendor/board-maps/yaml/DPTECHNICS_WALTER.yml +39 -0
  266. data/vendor/board-maps/yaml/EDGES3D.yml +25 -0
  267. data/vendor/board-maps/yaml/ELECROW_CROWPANEL_7.yml +8 -0
  268. data/vendor/board-maps/yaml/ESP32C2_DEV.yml +12 -0
  269. data/vendor/board-maps/yaml/ESP32C3_DEVKIT_LIPO.yml +14 -0
  270. data/vendor/board-maps/yaml/ESP32C6_DEV.yml +14 -0
  271. data/vendor/board-maps/yaml/ESP32C6_EVB.yml +15 -0
  272. data/vendor/board-maps/yaml/ESP32C6_QWIIC_POCKET.yml +15 -0
  273. data/vendor/board-maps/yaml/ESP32C6_THING_PLUS.yml +14 -0
  274. data/vendor/board-maps/yaml/ESP32H2_DEV.yml +12 -0
  275. data/vendor/board-maps/yaml/ESP32H2_DEVKIT_LIPO.yml +12 -0
  276. data/vendor/board-maps/yaml/ESP32P4_DEV.yml +35 -0
  277. data/vendor/board-maps/yaml/{RMP.yml → ESP32S2_DEVKIT_LIPO.yml} +1 -1
  278. data/vendor/board-maps/yaml/ESP32S2_DEVKIT_LIPO_USB.yml +43 -0
  279. data/vendor/board-maps/yaml/ESP32S3_DEVKIT_LIPO.yml +42 -0
  280. data/vendor/board-maps/yaml/ESP32S3_POWERFEATHER.yml +22 -0
  281. data/vendor/board-maps/yaml/ESP32_2432S028R.yml +14 -0
  282. data/vendor/board-maps/yaml/ESP32_SBC_FABGL.yml +35 -0
  283. data/vendor/board-maps/yaml/EVN_ALPHA.yml +48 -0
  284. data/vendor/board-maps/yaml/FEATHERS3.yml +1 -1
  285. data/vendor/board-maps/yaml/FEATHERS3NEO.yml +32 -0
  286. data/vendor/board-maps/yaml/FRI3D_2024_ESP32S3.yml +43 -0
  287. data/vendor/board-maps/yaml/GEEKBLE_ESP32C3.yml +13 -0
  288. data/vendor/board-maps/yaml/GEEKBLE_NANO_ESP32S3.yml +25 -0
  289. data/vendor/board-maps/yaml/HELTEC_CAPSULE_SENSOR_V3.yml +43 -0
  290. data/vendor/board-maps/yaml/HELTEC_VISION_MASTER_E290.yml +41 -0
  291. data/vendor/board-maps/yaml/HELTEC_VISION_MASTER_E_213.yml +41 -0
  292. data/vendor/board-maps/yaml/HELTEC_VISION_MASTER_T190.yml +41 -0
  293. data/vendor/board-maps/yaml/HELTEC_WIFI_LORA_32_V3.yml +42 -0
  294. data/vendor/board-maps/yaml/HELTEC_WIRELESS_BRIDGE.yml +8 -0
  295. data/vendor/board-maps/yaml/HELTEC_WIRELESS_MINI_SHELL.yml +13 -0
  296. data/vendor/board-maps/yaml/HELTEC_WIRELESS_PAPER.yml +42 -0
  297. data/vendor/board-maps/yaml/HELTEC_WIRELESS_SHELL_V3.yml +42 -0
  298. data/vendor/board-maps/yaml/HELTEC_WIRELESS_STICK_LITE_V3.yml +30 -0
  299. data/vendor/board-maps/yaml/HELTEC_WIRELESS_TRACKER.yml +41 -0
  300. data/vendor/board-maps/yaml/HT_DE01.yml +42 -0
  301. data/vendor/board-maps/yaml/HUIDU_HD_WF2.yml +5 -0
  302. data/vendor/board-maps/yaml/HUIDU_HD_WF4.yml +1 -0
  303. data/vendor/board-maps/yaml/IMBRIOS_LOGSENS_V1P1.yml +1 -1
  304. data/vendor/board-maps/yaml/LILYGO_LORA_CC1101.yml +6 -0
  305. data/vendor/board-maps/yaml/LILYGO_LORA_LR1121.yml +6 -0
  306. data/vendor/board-maps/yaml/LILYGO_LORA_SI4432.yml +6 -0
  307. data/vendor/board-maps/yaml/LILYGO_LORA_SX1262.yml +6 -0
  308. data/vendor/board-maps/yaml/LILYGO_LORA_SX1280.yml +6 -0
  309. data/vendor/board-maps/yaml/LILYGO_T3S3_LR1121.yml +9 -0
  310. data/vendor/board-maps/yaml/LILYGO_T3S3_SX1262.yml +9 -0
  311. data/vendor/board-maps/yaml/LILYGO_T3S3_SX1276.yml +9 -0
  312. data/vendor/board-maps/yaml/LILYGO_T3S3_SX1278.yml +9 -0
  313. data/vendor/board-maps/yaml/LILYGO_T3S3_SX1280.yml +9 -0
  314. data/vendor/board-maps/yaml/LILYGO_T3S3_SX1280PA.yml +8 -0
  315. data/vendor/board-maps/yaml/LILYGO_T_ETH_LITE.yml +21 -0
  316. data/vendor/board-maps/yaml/LOLIN_C3_MINI.yml +0 -1
  317. data/vendor/board-maps/yaml/LOLIN_C3_PICO.yml +13 -0
  318. data/vendor/board-maps/yaml/LOLIN_S3.yml +1 -0
  319. data/vendor/board-maps/yaml/LOLIN_S3_MINI_PRO.yml +40 -0
  320. data/vendor/board-maps/yaml/Lion_Bit_Dev_Board.yml +0 -2
  321. data/vendor/board-maps/yaml/M5STACK_CAPSULE.yml +8 -0
  322. data/vendor/board-maps/yaml/M5STACK_CARDPUTER.yml +8 -0
  323. data/vendor/board-maps/yaml/M5STACK_DIAL.yml +8 -0
  324. data/vendor/board-maps/yaml/M5STACK_DINMETER.yml +8 -0
  325. data/vendor/board-maps/yaml/M5STACK_FIRE.yml +1 -2
  326. data/vendor/board-maps/yaml/M5STACK_NANOC6.yml +17 -0
  327. data/vendor/board-maps/yaml/M5STACK_PAPER.yml +9 -0
  328. data/vendor/board-maps/yaml/M5STACK_POE_CAM.yml +5 -0
  329. data/vendor/board-maps/yaml/M5STACK_STAMP_C3.yml +13 -0
  330. data/vendor/board-maps/yaml/M5STACK_STAMP_S3.yml +4 -0
  331. data/vendor/board-maps/yaml/{M5Stick_C.yml → M5STACK_STICKC.yml} +0 -1
  332. data/vendor/board-maps/yaml/M5STACK_STICKC_PLUS.yml +9 -0
  333. data/vendor/board-maps/yaml/M5STACK_STICKC_PLUS2.yml +9 -0
  334. data/vendor/board-maps/yaml/M5STACK_TOUGH.yml +9 -0
  335. data/vendor/board-maps/yaml/M5STACK_UNIT_CAM.yml +10 -0
  336. data/vendor/board-maps/yaml/M5STACK_UNIT_CAMS3.yml +4 -0
  337. data/vendor/board-maps/yaml/M5Stack_ATOM.yml +0 -1
  338. data/vendor/board-maps/yaml/MAKERGO_C3_SUPERMINI.yml +14 -0
  339. data/vendor/board-maps/yaml/MARBLE_PICO.yml +48 -0
  340. data/vendor/board-maps/yaml/METEHOCA_AKANA_R1.yml +46 -0
  341. data/vendor/board-maps/yaml/NAMINO_BIANCO.yml +13 -0
  342. data/vendor/board-maps/yaml/NEBULAS3.yml +0 -1
  343. data/vendor/board-maps/yaml/NEWSAN_ARCHI.yml +48 -0
  344. data/vendor/board-maps/yaml/NOLOGO_ESP32C3_SUPER_MINI.yml +14 -0
  345. data/vendor/board-maps/yaml/NOLOGO_ESP32S3_PICO.yml +12 -0
  346. data/vendor/board-maps/yaml/OLIMEX_RP2040_PICO30_16MB.yml +48 -0
  347. data/vendor/board-maps/yaml/OLIMEX_RP2040_PICO30_2MB.yml +48 -0
  348. data/vendor/board-maps/yaml/OMGS3.yml +25 -0
  349. data/vendor/board-maps/yaml/OPTA_ANALOG.yml +7 -0
  350. data/vendor/board-maps/yaml/OPTA_DIGITAL.yml +5 -0
  351. data/vendor/board-maps/yaml/PCBCUPID_GLYPHC3.yml +23 -0
  352. data/vendor/board-maps/yaml/PCBCUPID_GLYPHC6.yml +32 -0
  353. data/vendor/board-maps/yaml/PCBCUPID_GLYPHH2.yml +24 -0
  354. data/vendor/board-maps/yaml/PINTRONIX_PINMAX.yml +42 -0
  355. data/vendor/board-maps/yaml/REDPILL_ESP32S3.yml +0 -1
  356. data/vendor/board-maps/yaml/SENSEBOX_MCU_ESP32S2.yml +12 -0
  357. data/vendor/board-maps/yaml/SPARKFUN_ESP32S3_THING_PLUS.yml +13 -0
  358. data/vendor/board-maps/yaml/SPARKFUN_MICROMOD_RP2040.yml +48 -0
  359. data/vendor/board-maps/yaml/SPARKFUN_PRO_MICRO_ESP32C3.yml +24 -0
  360. data/vendor/board-maps/yaml/SPARKLEMOTIONMINI_ESP32.yml +12 -0
  361. data/vendor/board-maps/yaml/SPARKLEMOTIONSTICK_ESP32.yml +11 -0
  362. data/vendor/board-maps/yaml/SPARKLEMOTION_ESP32.yml +12 -0
  363. data/vendor/board-maps/yaml/SQUIXL.yml +7 -0
  364. data/vendor/board-maps/yaml/THINGPULSE_EPULSE_FEATHER.yml +31 -0
  365. data/vendor/board-maps/yaml/THINGPULSE_EPULSE_FEATHER_C6.yml +14 -0
  366. data/vendor/board-maps/yaml/TINYC6.yml +25 -0
  367. data/vendor/board-maps/yaml/T_LORA_PAGER.yml +6 -0
  368. data/vendor/board-maps/yaml/T_WATCH_S3.yml +7 -0
  369. data/vendor/board-maps/yaml/T_WATCH_S3_ULTRA.yml +6 -0
  370. data/vendor/board-maps/yaml/UPESY_EDU_ESP32.yml +28 -0
  371. data/vendor/board-maps/yaml/UPESY_ESP32C3_BASIC.yml +13 -0
  372. data/vendor/board-maps/yaml/UPESY_ESP32C3_MINI.yml +12 -0
  373. data/vendor/board-maps/yaml/UPESY_ESP32S3_BASIC.yml +42 -0
  374. data/vendor/board-maps/yaml/VIRALINK_GATE32_01.yml +6 -0
  375. data/vendor/board-maps/yaml/VIRALINK_GATE32_11.yml +7 -0
  376. data/vendor/board-maps/yaml/WAVESHARE_ESP32S3_TOUCH_LCD_128.yml +8 -0
  377. data/vendor/board-maps/yaml/WAVESHARE_ESP32_S3_LCD_146.yml +41 -0
  378. data/vendor/board-maps/yaml/WAVESHARE_ESP32_S3_LCD_147.yml +41 -0
  379. data/vendor/board-maps/yaml/WAVESHARE_ESP32_S3_LCD_169.yml +38 -0
  380. data/vendor/board-maps/yaml/WAVESHARE_ESP32_S3_LCD_185.yml +41 -0
  381. data/vendor/board-maps/yaml/WAVESHARE_ESP32_S3_RELAY_6CH.yml +41 -0
  382. data/vendor/board-maps/yaml/WAVESHARE_ESP32_S3_TOUCH_AMOLED_143.yml +7 -0
  383. data/vendor/board-maps/yaml/WAVESHARE_ESP32_S3_TOUCH_AMOLED_164.yml +7 -0
  384. data/vendor/board-maps/yaml/WAVESHARE_ESP32_S3_TOUCH_AMOLED_18.yml +38 -0
  385. data/vendor/board-maps/yaml/WAVESHARE_ESP32_S3_TOUCH_AMOLED_191.yml +7 -0
  386. data/vendor/board-maps/yaml/WAVESHARE_ESP32_S3_TOUCH_AMOLED_241.yml +7 -0
  387. data/vendor/board-maps/yaml/WAVESHARE_ESP32_S3_TOUCH_LCD_146.yml +41 -0
  388. data/vendor/board-maps/yaml/WAVESHARE_ESP32_S3_TOUCH_LCD_169.yml +38 -0
  389. data/vendor/board-maps/yaml/WAVESHARE_ESP32_S3_TOUCH_LCD_185.yml +41 -0
  390. data/vendor/board-maps/yaml/WAVESHARE_ESP32_S3_TOUCH_LCD_185_BOX.yml +41 -0
  391. data/vendor/board-maps/yaml/WAVESHARE_ESP32_S3_TOUCH_LCD_21.yml +41 -0
  392. data/vendor/board-maps/yaml/WAVESHARE_ESP32_S3_TOUCH_LCD_28.yml +41 -0
  393. data/vendor/board-maps/yaml/WAVESHARE_ESP32_S3_TOUCH_LCD_4.yml +36 -0
  394. data/vendor/board-maps/yaml/WAVESHARE_ESP32_S3_TOUCH_LCD_43.yml +38 -0
  395. data/vendor/board-maps/yaml/WAVESHARE_ESP32_S3_TOUCH_LCD_43B.yml +38 -0
  396. data/vendor/board-maps/yaml/WAVESHARE_ESP32_S3_TOUCH_LCD_5.yml +38 -0
  397. data/vendor/board-maps/yaml/WAVESHARE_ESP32_S3_TOUCH_LCD_5B.yml +38 -0
  398. data/vendor/board-maps/yaml/WAVESHARE_ESP32_S3_TOUCH_LCD_7.yml +38 -0
  399. data/vendor/board-maps/yaml/WAVESHARE_ESP32_S3_ZERO.yml +36 -0
  400. data/vendor/board-maps/yaml/WAVESHARE_RP2040_MATRIX.yml +48 -0
  401. data/vendor/board-maps/yaml/WAVESHARE_RP2040_ONE.yml +1 -0
  402. data/vendor/board-maps/yaml/WAVESHARE_RP2040_PIZERO.yml +47 -0
  403. data/vendor/board-maps/yaml/WAVESHARE_RP2040_ZERO.yml +1 -0
  404. data/vendor/board-maps/yaml/WEACT_STUDIO_ESP32C3.yml +14 -0
  405. data/vendor/board-maps/yaml/WS_ESP32_S3_MATRIX.yml +38 -0
  406. data/vendor/board-maps/yaml/WT32_SC01_PLUS.yml +7 -0
  407. data/vendor/board-maps/yaml/WiFiduinoV2.yml +1 -0
  408. data/vendor/board-maps/yaml/XIAO_ESP32C3.yml +0 -1
  409. data/vendor/board-maps/yaml/XIAO_ESP32C6.yml +22 -0
  410. data/vendor/board-maps/yaml/XIAO_ESP32S3_PLUS.yml +46 -0
  411. data/vendor/board-maps/yaml/YB_ESP32S3_AMP_V2.yml +28 -0
  412. data/vendor/board-maps/yaml/YB_ESP32S3_AMP_V3.yml +28 -0
  413. data/vendor/board-maps/yaml/YB_ESP32S3_ETH.yml +40 -0
  414. data/vendor/board-maps/yaml/mercury.yml +20 -0
  415. data/vendor/board-maps/yaml/unphone9.yml +8 -0
  416. metadata +259 -105
  417. data/.vscode/settings.json +0 -5
  418. data/.vscode/tasks.json +0 -20
  419. data/HARDWARE.md +0 -264
  420. data/benchmarks/i2c_ssd1306_refresh.rb +0 -84
  421. data/examples/advanced/m5_env.rb +0 -48
  422. data/examples/advanced/rotary_encoder_mac_volume.rb +0 -48
  423. data/examples/advanced/ssd1306_time_temp_rh.rb +0 -48
  424. data/examples/analog_io/ads1115.rb +0 -57
  425. data/examples/analog_io/ads1118.rb +0 -73
  426. data/examples/analog_io/dac_loopback.rb +0 -34
  427. data/examples/analog_io/input.rb +0 -55
  428. data/examples/connection/tcp.rb +0 -34
  429. data/examples/digital_io/button.rb +0 -13
  430. data/examples/digital_io/rotary_encoder.rb +0 -26
  431. data/examples/display/hd44780.png +0 -0
  432. data/examples/display/hd44780.rb +0 -39
  433. data/examples/display/ssd1306.rb +0 -40
  434. data/examples/display/ssd1306_s2_pico.rb +0 -29
  435. data/examples/eeprom/built_in.rb +0 -32
  436. data/examples/i2c/search.rb +0 -55
  437. data/examples/led/apa102_bounce.rb +0 -33
  438. data/examples/led/apa102_breathe.rb +0 -45
  439. data/examples/led/builtin_blink.rb +0 -12
  440. data/examples/led/seven_segment_char_echo.rb +0 -15
  441. data/examples/led/ws2812_bounce.rb +0 -32
  442. data/examples/led/ws2812_builtin_blink.rb +0 -21
  443. data/examples/motor/l298.rb +0 -43
  444. data/examples/motor/servo.rb +0 -16
  445. data/examples/motor/stepper.png +0 -0
  446. data/examples/motor/stepper.rb +0 -43
  447. data/examples/pulse_io/buzzer.rb +0 -30
  448. data/examples/pulse_io/ir_transmitter.rb +0 -55
  449. data/examples/rtc/ds3231.rb +0 -48
  450. data/examples/sensor/aht10.rb +0 -19
  451. data/examples/sensor/aht20.rb +0 -19
  452. data/examples/sensor/bme280.rb +0 -38
  453. data/examples/sensor/bmp180.rb +0 -22
  454. data/examples/sensor/dht.rb +0 -24
  455. data/examples/sensor/ds18b20.rb +0 -58
  456. data/examples/sensor/generic_pir.rb +0 -25
  457. data/examples/sensor/hcsr04.rb +0 -14
  458. data/examples/sensor/htu21d.rb +0 -54
  459. data/examples/sensor/htu31d.rb +0 -35
  460. data/examples/sensor/neat_tph_readings.rb +0 -26
  461. data/examples/sensor/qmp6988.rb +0 -53
  462. data/examples/sensor/rcwl9620.rb +0 -15
  463. data/examples/sensor/sht3x.rb +0 -34
  464. data/examples/spi/input_register.rb +0 -50
  465. data/examples/spi/output_register.rb +0 -49
  466. data/examples/spi/ssd_through_register.rb +0 -40
  467. data/examples/spi/two_registers.rb +0 -46
  468. data/examples/uart/bit_bang_read.rb +0 -16
  469. data/examples/uart/bit_bang_write.rb +0 -16
  470. data/examples/uart/board_passthrough.rb +0 -34
  471. data/examples/uart/hardware_loopback.rb +0 -16
  472. data/lib/denko/analog_io/sensor.rb +0 -6
  473. data/lib/denko/eeprom/built_in.rb +0 -69
  474. data/lib/denko/fonts.rb +0 -106
  475. data/lib/denko/sensor/virtual.rb +0 -42
  476. data/src/lib/DenkoIROutESP.cpp +0 -26
  477. data/test/eeprom/built_in_test.rb +0 -61
  478. data/tutorial/01-led/led.fzz +0 -0
  479. data/tutorial/01-led/led.pdf +0 -0
  480. data/tutorial/01-led/led.rb +0 -73
  481. data/tutorial/02-button/button.fzz +0 -0
  482. data/tutorial/02-button/button.pdf +0 -0
  483. data/tutorial/02-button/button.rb +0 -64
  484. data/tutorial/03-potentiometer/potentiometer.fzz +0 -0
  485. data/tutorial/03-potentiometer/potentiometer.pdf +0 -0
  486. data/tutorial/03-potentiometer/potentiometer.rb +0 -62
  487. data/tutorial/04-pwm_led/pwm_led.fzz +0 -0
  488. data/tutorial/04-pwm_led/pwm_led.pdf +0 -0
  489. data/tutorial/04-pwm_led/pwm_led.rb +0 -66
  490. data/tutorial/05-rgb_led/rgb_led.fzz +0 -0
  491. data/tutorial/05-rgb_led/rgb_led.pdf +0 -0
  492. data/tutorial/05-rgb_led/rgb_led.rb +0 -58
  493. data/tutorial/05-rgb_led/rgb_mapping.rb +0 -76
  494. data/vendor/board-maps/yaml/STAMP_S3.yml +0 -8
  495. /data/vendor/board-maps/yaml/{BRIDGETEK_IDM2040-7A.yml → BRIDGETEK_IDM2040_43A.yml} +0 -0
  496. /data/vendor/board-maps/yaml/{heltec_wifi_32_lora_V3.yml → HELTEC_WIRELESS_STICK_V3.yml} +0 -0
  497. /data/vendor/board-maps/yaml/{M5Stack_Core_ESP32.yml → M5STACK_CORE.yml} +0 -0
  498. /data/vendor/board-maps/yaml/{M5Stamp_Pico.yml → M5STACK_STAMP_PICO.yml} +0 -0
  499. /data/vendor/board-maps/yaml/{M5Stack-Timer-CAM.yml → M5STACK_TIMER_CAM.yml} +0 -0
data/DEPS_IDE.md CHANGED
@@ -8,7 +8,7 @@ Some microcontroller platforms require board manager cores that do not come with
8
8
  * Confirm and exit Preferences. Wait for the IDE to finish downloading indexes from the new URL.
9
9
  * Click on Tools > Board > Board Manager.
10
10
  * Search for the platform you are installing by name, and click Install, optionally selecting a version.
11
-
11
+
12
12
  ### Installing Libraries
13
13
 
14
14
  All platforms will require libraries to be installed. To install a library do the following:
@@ -33,53 +33,52 @@ All platforms will require libraries to be installed. To install a library do th
33
33
  Arduino SAMD Boards (32-bits ARM Cortex-M0+)
34
34
  Arduino UNO R4 Boards
35
35
  ESP8266 Boards
36
- ESP32 Boards @ v2.0.17
36
+ ESP32 Boards @ 3.2.0
37
37
  Raspberry Pi Pico/RP2040
38
- ````
38
+ ````r
39
39
  * Libraries:
40
40
  ````
41
- Servo by Michael Margolis, Arduino
42
- Ethernet by Various
43
- WiFi by Arduino
44
- WiFi101 by Arduino
45
- WiFiNINA by Arduino
46
- IRremote @ v4.1.2 by shirriff, z3to, ArminJo
47
- IRremoteESP82666 @ v2.8.5 by David Conran, Sebastien Warin
48
- ESP32Servo by Kevin Harrington, John K. Bennett
49
- Adafruit NeoPixel by Adafruit
41
+ Servo by Michael Margolis, Arduino
42
+ Ethernet by Various
43
+ WiFi by Arduino
44
+ WiFi101 by Arduino
45
+ WiFiNINA by Arduino
46
+ ESP32Servo by Kevin Harrington, John K. Bennett
47
+ IRremote @ 4.4.2 by shirriff, z3to, ArminJo
48
+ Adafruit NeoPixel @ 1.15.1 by Adafruit
50
49
  ````
51
50
 
52
51
  **AVR-based Arduinos & Clones Only:**
53
52
  * Boards:
54
53
  ````
55
54
  Arduino megaAVR Boards (only for Atmega4809 / Nano Every)
56
- ````
55
+ ````
57
56
  * Libraries:
58
57
  ````
59
- Servo by Michael Margolis, Arduino
60
- Ethernet by Various
61
- WiFi by Arduino
62
- WiFiNINA by Arduino
63
- IRremote @ v4.1.2 by shirriff, z3to, ArminJo
64
- Adafruit NeoPixel by Adafruit
58
+ Servo by Michael Margolis, Arduino
59
+ Ethernet by Various
60
+ WiFi by Arduino
61
+ WiFiNINA by Arduino
62
+ IRremote @ 4.4.2 by shirriff, z3to, ArminJo
63
+ Adafruit NeoPixel @ 1.15.1 by Adafruit
65
64
  ````
66
-
65
+
67
66
  **ARM-based Arduinos & Clones Only:**
68
67
  * Boards:
69
68
  ````
70
69
  Arduino SAM Boards (32-bits ARM Cortex-M3)
71
70
  Arduino SAMD Boards (32-bits ARM Cortex-M0+)
72
71
  Arduino UNO R4 Boards
73
- ````
72
+ ````
74
73
  * Libraries:
75
74
  ````
76
- Servo by Michael Margolis, Arduino
77
- Ethernet by Various
78
- WiFi by Arduino
79
- WiFi101 by Arduino
80
- WiFiNINA by Arduino
81
- IRremote @ v4.1.2 by shirriff, z3to, ArminJo
82
- Adafruit NeoPixel by Adafruit
75
+ Servo by Michael Margolis, Arduino
76
+ Ethernet by Various
77
+ WiFi by Arduino
78
+ WiFi101 by Arduino
79
+ WiFiNINA by Arduino
80
+ IRremote @ 4.4.2 by shirriff, z3to, ArminJo
81
+ Adafruit NeoPixel @ 1.15.1 by Adafruit
83
82
  ````
84
83
 
85
84
  **ESP8266 Only:**
@@ -90,11 +89,11 @@ All platforms will require libraries to be installed. To install a library do th
90
89
  * Boards:
91
90
  ````
92
91
  ESP8266 Boards
93
- ````
92
+ ````
94
93
  * Libraries:
95
94
  ````
96
- IRremoteESP82666 @ v2.8.5 by David Conran, Sebastien Warin
97
- Adafruit NeoPixel by Adafruit
95
+ IRremote @ 4.4.2 by shirriff, z3to, ArminJo
96
+ Adafruit NeoPixel @ 1.15.1 by Adafruit
98
97
  ````
99
98
 
100
99
  **ESP32 Only:**
@@ -104,15 +103,15 @@ All platforms will require libraries to be installed. To install a library do th
104
103
  ````
105
104
  * Boards (latest version unless specified):
106
105
  ````
107
- ESP32 Boards @ v2.0.17
108
- ````
106
+ ESP32 Boards @ v3.2.0
107
+ ````
109
108
  * Libraries (latest version unless specified):
110
109
  ````
111
- IRremoteESP82666 @ v2.8.5 by David Conran, Sebastien Warin
112
- ESP32Servo by Kevin Harrington, John K. Bennett
113
- Adafruit NeoPixel by Adafruit
110
+ ESP32Servo @ 3.0.6 by Kevin Harrington, John K. Bennett
111
+ IRremote @ 4.4.2 by shirriff, z3to, ArminJo
112
+ Adafruit NeoPixel @ 1.15.1 by Adafruit
114
113
  ````
115
-
114
+
116
115
  **RP2040 Only:**
117
116
  * Board Manager URLs:
118
117
  ````
@@ -121,8 +120,9 @@ All platforms will require libraries to be installed. To install a library do th
121
120
  * Boards:
122
121
  ````
123
122
  Raspberry Pi Pico/RP2040
124
- ````
123
+ ````
125
124
  * Libraries:
126
125
  ````
127
- IRremote @ v4.1.2 by shirriff, z3to, ArminJo
126
+ IRremote @ 4.4.2 by shirriff, z3to, ArminJo
127
+ Adafruit NeoPixel @ 1.15.1 by Adafruit
128
128
  ````
@@ -0,0 +1,103 @@
1
+ # Supported Microcontrollers
2
+
3
+ :green_heart: Full support :yellow_heart: Partial support :heart: Planned. No support yet :question: Works in theory. Untested in real hardware.
4
+
5
+ ## Espressif Chips with Wi-Fi (Except H2)
6
+ [![ESP8266 Build Status](https://github.com/denko-rb/denko/actions/workflows/build_esp8266.yml/badge.svg)](https://github.com/denko-rb/denko/actions/workflows/build_esp8266.yml)
7
+ [![ESP32 Build Status](https://github.com/denko-rb/denko/actions/workflows/build_esp32.yml/badge.svg)](https://github.com/denko-rb/denko/actions/workflows/build_esp32.yml)
8
+ [![ESP32-C3 Build Status](https://github.com/denko-rb/denko/actions/workflows/build_esp32c3.yml/badge.svg)](https://github.com/denko-rb/denko/actions/workflows/build_esp32c3.yml)
9
+ [![ESP32-C6 Build Status](https://github.com/denko-rb/denko/actions/workflows/build_esp32c6.yml/badge.svg)](https://github.com/denko-rb/denko/actions/workflows/build_esp32c6.yml)
10
+ [![ESP32-H2 Build Status](https://github.com/denko-rb/denko/actions/workflows/build_esp32h2.yml/badge.svg)](https://github.com/denko-rb/denko/actions/workflows/build_esp32h2.yml)
11
+ [![ESP32-S2 Build Status](https://github.com/denko-rb/denko/actions/workflows/build_esp32s2.yml/badge.svg)](https://github.com/denko-rb/denko/actions/workflows/build_esp32s2.yml)
12
+ [![ESP32-S3 Build Status](https://github.com/denko-rb/denko/actions/workflows/build_esp32s3.yml/badge.svg)](https://github.com/denko-rb/denko/actions/workflows/build_esp32s3.yml)
13
+
14
+ | Chip | Status | Board Tested | Notes |
15
+ | :-------- | :------: | :--------------- |------ |
16
+ | ESP8266 | :green_heart: | NodeMCU |
17
+ | ESP8285 | :question: | DOIT ESP-Mx DevKit | Should be identical to 8266. Not tested in hardware.
18
+ | ESP32 | :green_heart: | DOIT ESP32 DevKit V1 |
19
+ | ESP32-S2 | :green_heart: | LOLIN S2 Pico | Native USB-CDC (broken in core 3.0+)
20
+ | ESP32-S3 | :green_heart: | LOLIN S3 V1.0.0 | Native USB-CDC (broken in core 3.0+)
21
+ | ESP32-C3 | :green_heart: | LOLIN C3 Mini V2.1.0 | Native USB-CDC (broken in core 3.0+)
22
+ | ESP32-H2 | :green_heart: | ESP32-H2-MINI-1 | No Wi-Fi. Native USB-CDC (broken in core 3.0+)
23
+ | ESP32-C6 | :green_heart: | ESP32-C6-WROOM-1 | Native USB-CDC (broken in core 3.0+)
24
+
25
+ **Note:** For ESP32 chips using native USB-CDC, make sure `USB CDC On Boot` is `Enabled` in the IDE's `Tools` menu. Flashing from the CLI doesn't automatically enable this, so the IDE is recommended for now.
26
+
27
+ **Note:** Since Arduino ESP32 Core version 3.0+, USB-CDC is very unreliable when sending lots of data both directions (something denko can do). It's a known issue in the core. Use a regular UART until it's fixed.
28
+
29
+ ## AVR/MegaAVR Based Arduino Products (and Clones)
30
+ [![AVR Build Status](https://github.com/denko-rb/denko/actions/workflows/build_atmega_avr.yml/badge.svg)](https://github.com/denko-rb/denko/actions/workflows/build_atmega_avr.yml)
31
+ [![MegaAVR Build Status](https://github.com/denko-rb/denko/actions/workflows/build_atmega_megaavr.yml/badge.svg)](https://github.com/denko-rb/denko/actions/workflows/build_atmega_megaavr.yml)
32
+
33
+ | Chip | Status | Products | Notes |
34
+ | :-------- | :------: | :--------------- |------ |
35
+ | ATmega168 | :green_heart: | Duemilanove, Diecimila, Pro | Omits features. `denko targets` for info.
36
+ | ATmega328 | :green_heart: | Uno R3, Uno WiFi, Nano, Fio, Pro |
37
+ | ATmega32u4 | :green_heart: | Leonardo, Micro, Leonardo ETH, Esplora, LilyPad USB |
38
+ | ATmega1280 | :green_heart: | Mega |
39
+ | ATmega2560 | :green_heart: | Mega2560, Arduino Mega ADK |
40
+ | ATmega4809 | :green_heart: | Nano Every, Uno WiFi Rev2 |
41
+
42
+ **Note:** Only USB boards listed. Any board with a supported chip should work, once you can flash it and connect to serial.
43
+
44
+ ## ARM Based Arduino Products (and Clones)
45
+ [![SAM3X Build Satus](https://github.com/denko-rb/denko/actions/workflows/build_atsam3x.yml/badge.svg)](https://github.com/denko-rb/denko/actions/workflows/build_atsam3x.yml)
46
+ [![SAMD Build Satus](https://github.com/denko-rb/denko/actions/workflows/build_atsamd21.yml/badge.svg)](https://github.com/denko-rb/denko/actions/workflows/build_atsamd21.yml)
47
+ [![RA4M1 Build Satus](https://github.com/denko-rb/denko/actions/workflows/build_ra4m1.yml/badge.svg)](https://github.com/denko-rb/denko/actions/workflows/build_ra4m1.yml)
48
+
49
+ | Chip | Status | Products | Notes |
50
+ | :-------- | :------: | :--------------- |------ |
51
+ | ATSAM3X8E | :green_heart: | Due | Native USB. Tone and infrared not supported
52
+ | ATSAMD21 | :green_heart: | Zero, M0 Series, Nano 33 IOT, MKR WiFi 1010 | Native USB
53
+ | RA4M1 | :green_heart: | Uno R4 Minima, Uno R4 WiFi | Infrared not supported
54
+
55
+ ## Arduino Networking
56
+
57
+ | Chip | Status | Products | Notes |
58
+ | :-------- | :------: | :--------------- |------ |
59
+ | Wiznet W5100/5500 | :green_heart: | Ethernet Shield | Wired Ethernet shield
60
+ | HDG204 + AT32UC3 | :question: | WiFi Shield | Compiles. No test hardware
61
+ | ATWINC1500 | :green_heart: | MKR1000, WiFi Shield 101 | #define WIFI_101 for shield
62
+ | u-blox NINA-W102 | :question: | Uno WiFi Rev 2, MKR WiFi 1010, Nano 33 IOT | Compiles. No test hardware
63
+
64
+ ## Raspberry Pi Microcontrollers
65
+ [![RP2040 Build Status](https://github.com/denko-rb/denko/actions/workflows/build_rp2040.yml/badge.svg)](https://github.com/denko-rb/denko/actions/workflows/build_rp2040.yml)
66
+
67
+ | Chip | Status | Board Tested | Notes |
68
+ | :-------- | :------: | :--------------- |------ |
69
+ | RP2040 | :green_heart: | Raspberry Pi Pico (W) |
70
+ | RP2350 | :heart: | Raspberry Pi Pico 2 (W) |
71
+
72
+ ## AVR Chips from [MightyCore](https://github.com/MCUdude/MightyCore)
73
+
74
+ | Chip | Status | Products | Notes |
75
+ | :-------- | :------: | :--------------- |------ |
76
+ | ATmega1284 | :heart: | Used in many 8-bit 3D printer boards. |
77
+
78
+ ## Implemented Interfaces
79
+
80
+ | Name | Status | HW/SW | Component Class | Notes |
81
+ | :--------------- | :------: | :--- | :-------------- | :---- |
82
+ | Digital In | :green_heart: | H | `DigitalIO::Input` | 1ms - 128ms (4ms default) listen, poll, or read
83
+ | Analog In (ADC) | :green_heart: | H | `AnalogIO::Input` | 1ms - 128ms (16ms default) listen, poll, or read
84
+ | Digital Out | :green_heart: | H | `DigitalIO::Output` |
85
+ | Analog Out (DAC) | :green_heart: | H | `AnalogIO::Output` | **Only** SAM3X, SAMD21, RA4M1, ESP32, ESP32-S2
86
+ | PWM Out | :green_heart: | H | `PulseIO::PWMOutput` |
87
+ | Servo/ESC Motor Drive | :green_heart: | H | See Motor Driver Table | Depends on PWM
88
+ | Tone Out (Sq. Wave) | :green_heart: | H | `PulseIO::Buzzer` | Except SAM3X. Uses PWM
89
+ | I2C | :green_heart: | H | `I2C::Bus` | Predetermined pins per board
90
+ | I2C Bit-Bang | :green_heart: | S | `I2C::BitBang` | Any pins
91
+ | SPI | :green_heart: | H | `SPI::Bus` | Predetermined pins per board
92
+ | SPI Bit-Bang | :green_heart: | S | `SPI::BitBang` | Any pins
93
+ | UART | :green_heart: | H | `UART::Hardware` | **Except** Atmega328, ATmega168
94
+ | UART Bit-Bang | :green_heart: | S | `UART::BitBang` | **Only** ATmega328
95
+ | Maxim OneWire | :green_heart: | S | `OneWire::Bus` | No overdrive
96
+ | Infrared Output | :green_heart: | S | `PulseIO::IROutput` | **Except** SAM3X, RA4M1
97
+ | Infrared Input | :heart: | S | `PulseIO::IRInput` | Doable with existing library
98
+ | WS2812 RGB LEDs | :green_heart: | S | `LED::WS2812` |
99
+ | ESP32-PCNT | :heart: | H | - | **Only** ESP32. Pulse and encoder counter
100
+ | ESP32-MCPWM | :heart: | H | - | **Only** ESP32. Motor control PWM
101
+
102
+ **Note:** When listening, the board checks the pin's value every **_2^n_** milliseconds (**_n_** from **_0_** to **_7_**), without further commands.
103
+ Polling and reading follow a call and response pattern.
data/PERIPHERALS.md ADDED
@@ -0,0 +1,178 @@
1
+ # Supported Peripherals
2
+
3
+ :green_heart: Full support :yellow_heart: Partial support :heart: Planned. No support yet
4
+
5
+ ## Digital and Analog Input and Output
6
+
7
+ | Name | Status | Interface | Component Class | Notes |
8
+ | :--------------- | :------: | :-------- | :--------------- |------ |
9
+ | Button | :green_heart: | Digital In | `DigitalIO::Button` |
10
+ | Relay | :green_heart: | Digital Out | `DigitalIO::Relay` |
11
+ | Rotary Encoder | :green_heart: | Digital In | `DigitalIO::RotaryEncoder` | Listens every 1ms
12
+ | Potentiometer | :green_heart: | Analog In | `AnalogIO::Potentiometer` | Smoothing on by default
13
+ | Joystick | :green_heart: | Analog In | `AnalogIO::Joystick` |
14
+
15
+ ## LED
16
+
17
+ | Name | Status | Interface | Component Class | Notes |
18
+ | :--------------- | :------: | :-------- | :--------------- |------ |
19
+ | LED | :green_heart: | Digi/Ana Out | `LED::Base` |
20
+ | RGB LED | :green_heart: | Digi/Ana Out | `LED::RGB` |
21
+ | 7 Segment Display | :yellow_heart: | Digital Out | `LED::SevenSegment` | No decimal point
22
+ | 8x8 LED (MAX7219) | :heart: | SPI | `LED::MAX7219` |
23
+ | TM1637 | :heart: | SPI | `LED::TM1637` | 4x 7 Segment + Colon
24
+ | TM1652 | :heart: | SPI | `LED::TM1652` | 4x 7 Segment w/ decimal point + Colon
25
+ | Neopixel / WS2812B | :green_heart: | Adafruit Library | `LED::WS2812` |
26
+ | Dotstar / APA102 | :green_heart: | SPI | `LED::APA102` |
27
+
28
+ ## Display
29
+
30
+ | Name | Status | Interface | Component Class | Notes |
31
+ | :--------------- | :------: | :-------- | :--------------- |------ |
32
+ | HD44780 LCD | :green_heart: | Digital Out, Output Register | `Display::HD44780` | Char LCD. Also works through PCF8574
33
+ | Canvas | :yellow_heart: | - | `Display::Canvas` | Mono 2D graphics
34
+ | SSD1306 | :green_heart: | I2C or SPI | `Display::SSD1306` | Mono OLED: 128x64, 128x32
35
+ | SH1106 | :green_heart: | I2C or SPI | `Display::SH1106` | Mono OLED: 128x64
36
+ | SH1107 | :green_heart: | I2C or SPI | `Display::SH1107` | Mono OLED: 128x128
37
+ | PCD8544 | :green_heart: | SPI | `Display::PCD8544` | 84x48 Mono LCD (aka Nokia 5110)
38
+ | ST7565 | :green_heart: | SPI | `Display::ST7565` | 128x64 Mono LCD
39
+ | ST7302 | :green_heart: | SPI | `Display::ST7302` | 250x122 Mono Reflective LCD
40
+ | LS027B7DH01 | :heart: | SPI | `Display::SharpLCD` | 400x240 Mono Reflective LCD
41
+ | SSD1680 | :green_heart: | SPI | `Display::SSD1680` | 296x128 Black/(Red)/White E-Paper (2.9")
42
+ | SSD1681 | :green_heart: | SPI | `Display::SSD1681` | 200x200 Black/(Red)/White E-Paper (1.54")
43
+ | IL0373 | :green_heart: | SPI | `Display::IL0373` | 212x104 Black/(Red)/White E-Paper (2.13")
44
+ | ST7735S | :heart: | SPI | `Display::ST7735S` | 160x128 RGB LCD
45
+ | ST7789V | :heart: | SPI | `Display::ST7789V` | 240x135 RGB LCD (TTGO)
46
+ | ILI9341 | :heart: | SPI | `Display::ILI9341` | 240x320 RGB LCD
47
+ | GC9107 | :heart: | SPI | `Display::GC9107` | 128x128 RGB LCD
48
+ | GC9A01 | :heart: | SPI | `Display::GCA9A01` | 240x240 Round RGB LCD
49
+
50
+ ## Sound
51
+
52
+ | Name | Status | Interface | Component Class | Notes |
53
+ | :--------------- | :------: | :-------- | :--------------- |------ |
54
+ | Piezo Buzzer | :green_heart: | Tone Out | `PulseIO::Buzzer` | Frequency > 30Hz
55
+
56
+ ## Motors and Motor Drivers
57
+
58
+ | Name | Status | Interface | Component Class | Notes |
59
+ | :--------------- | :------: | :-------- | :--------------- |------ |
60
+ | Generic Hobby Servo | :green_heart: | Servo/ESC PWM | `Motor::Servo` | Max depends on PWM channel count
61
+ | Generic ESC | :yellow_heart: | Servo/ESC PWM | `Motor::Servo` | Works. Needs its own class.
62
+ | PCA9685 | :heart: | I2C | `PulseIO::PCA9685` | 16-ch, 12-bit PWM for servo or LED
63
+ | L298N | :green_heart: | Digi + PWM Out | `Motor::L298` | H-Bridge DC motor driver
64
+ | DRV8833 | :heart: | Digi + PWM Out | `Motor::DRV8833` | H-Bridge DC motor driver
65
+ | TB6612 | :heart: | Digi + PWM Out | `Motor::TB6612` | H-Bridge DC motor driver
66
+ | AT8236 | :heart: | Digi + PWM Out | `Motor::AT8236` | H-Bridge DC motor driver
67
+ | A3967 | :green_heart: | Digital Out | `Motor::A3967` | 1-ch microstepper (EasyDriver)
68
+ | A4988 | :yellow_heart: | DigitalOut | `Motor::Stepper` | 1-ch microstepper
69
+ | TMC2209 | :heart: | - | - | 1-ch silent stepper driver
70
+
71
+ ## I/O Expansion
72
+
73
+ | Name | Status | Interface | Component Class | Notes |
74
+ | :--------------- | :------: | :-------- | :--------------- |------ |
75
+ | Input Register | :green_heart: | SPI | `SPI::InputRegister` | Tested on CD4021B
76
+ | Output Register | :green_heart: | SPI | `SPI::OutputRegister`| Tested on 74HC595
77
+ | PCF8574 Expander | :green_heart: | I2C | `DigitalIO::PCF8574` | 8-ch digital I/O. Commonly found on HD44780
78
+ | ADS1100 ADC | :green_heart: | I2C | `AnalogIO::ADS1100` | 1-ch, 16-bit ADC. No continuous mode.
79
+ | ADS1115 ADC | :green_heart: | I2C | `AnalogIO::ADS1115` | 4-ch, 16-bit ADC. Comparator not implemented.
80
+ | ADS1118 ADC | :green_heart: | SPI | `AnalogIO::ADS1118` | 4-ch, 16-bit ADC + temperature
81
+ | ADS1232 ADC | :heart: | SPI | `AnalogIO::ADS1232` | 2-ch, 24-bit ADC + temperature
82
+ | PCF8591 ADC/DAC | :heart: | I2C | `AnalogIO::PCF8591` | 4-ch, 8-bit ADC + 1-ch 8-bit DAC
83
+ | MCP4725 DAC | :heart: | I2C | `AnalogIO::MCP4275` | 1-ch, 12-bit DAC
84
+ | PCA9548 I2C Mux | :heart: | I2C | `I2C::PCA9548` | 8-way I2C multiplexer
85
+
86
+ ## Environmental Sensors
87
+
88
+ | Name | Status | Interface | Component Class | Type | Notes |
89
+ | :--------------- | :------: | :-------- | :--------------- |--------------- | ---------------------- |
90
+ | MAX31850 | :heart: | OneWire | `Sensor::MAX31850` | Thermocouple |
91
+ | MAX6675 | :heart: | SPI | `Sensor::MAX6675` | Thermocouple |
92
+ | DS18B20 | :green_heart: | OneWire | `Sensor::DS18B20` | Temp |
93
+ | DHT11/21/22 | :green_heart: | Digi In/Out | `Sensor::DHT` | Temp / RH |
94
+ | SHT30/31/35 | :green_heart: | I2C | `Sensor::SHT3X` | Temp / RH | M5Stack ENV III, one-shot only
95
+ | SHT40/41 | :green_heart: | I2C | `Sensor::SHT4X` | Temp / RH |
96
+ | QMP6988 | :green_heart: | I2C | `Sensor::QMP6988` | Temp / Press | M5Stack ENV III
97
+ | BMP180 | :green_heart: | I2C | `Sensor::BMP180` | Temp / Press |
98
+ | BMP280 | :green_heart: | I2C | `Sensor::BMP280` | Temp / Press |
99
+ | BME280 | :green_heart: | I2C | `Sensor::BME280` | Temp / Press / RH |
100
+ | BME680 | :heart: | I2C | `Sensor::BME680` | Temp / Press / RH / TVOC |
101
+ | HDC1080 | :green_heart: | I2C | `Sensor::HDC1080` | Temp / RH |
102
+ | HTU21D | :green_heart: | I2C | `Sensor::HTU21D` | Temp / RH | No user register read
103
+ | HTU31D | :green_heart: | I2C | `Sensor::HTU31D` | Temp / RH | No diagnostic read
104
+ | AHT10/15 | :green_heart: | I2C | `Sensor::AHT1X` | Temp / RH |
105
+ | AHT20/21/25 | :green_heart: | I2C | `Sensor::AHT2X` | Temp / RH |
106
+ | AHT30 | :green_heart: | I2C | `Sensor::AHT3X` | Temp / RH |
107
+ | ENS160 | :heart: | I2C | `Sensor::ENS160` | eCO2 / TVOC / AQI |
108
+ | AGS02MA | :heart: | I2C | `Sensor::AGS02MA` | TVOC |
109
+ | SCD40 | :heart: | I2C | `Sensor::SDC40` | Temp / Press / CO2 |
110
+ | CCS811 | :heart: | I2C | `Sensor::CCS811` | eCO2 |
111
+ | MICS5524 | :heart: | Analog In | `Sensor::MICS5524` | CO/Alcohol/VOC |
112
+
113
+ ## Light Sensors
114
+
115
+ | Name | Status | Interface | Component Class | Notes |
116
+ | :--------------- | :------: | :-------- | :--------------- |------ |
117
+ | BH1750 | :heart: | Digital In | `Sensor::BH1750` | Ambient Light
118
+ | TCS34725 | :heart: | I2C | `Sensor::TCS34725` | RGB
119
+ | APDS9960 | :heart: | I2C | `Sensor::APDS9960` | Proximity, RGB, Gesture
120
+
121
+ ## PIR Motion Sensors
122
+ | Name | Status | Interface | Component Class | Notes |
123
+ | :--------------- | :------: | :-------- | :--------------- |------ |
124
+ | HC-SR501 | :green_heart: | Digital In | `Sensor::GenericPIR` |
125
+ | HC-SR505 | :yellow_heart: | Digital In | `Sensor::GenericPIR` |
126
+ | AS312 | :green_heart: | Digital In | `Sensor::GenericPIR` |
127
+ | AM312 | :yellow_heart: | Digital In | `Sensor::GenericPIR` |
128
+
129
+ ## Distance Sensors
130
+
131
+ | Name | Status | Interface | Component Class | Notes |
132
+ | :--------------- | :------: | :-------- | :--------------- |------ |
133
+ | HC-SR04 | :green_heart: | Digi In/Out | `Sensor::HCSR04` | Ultrasonic, 20-4000mm
134
+ | RCWL-1601 | :green_heart: | Digi In/Out | `Sensor::HCSR04` | Essentially a 3.3V version of HC-SR04
135
+ | RCWL-9620 | :green_heart: | I2C | `Sensor::RCWL9260` | Ultrasonic, 20-4500mm
136
+ | JSN-SR04T | :green_heart: | UART | `Sensor::JSNSR04T` | Mode 2 ONLY. Use HC-SR04 driver for mode 0 or 4.
137
+ | VL53L0X | :yellow_heart: | I2C | `Sensor::VL53L0X` | Laser, 20 - 2000mm. Continuous mode only. No configuration.
138
+ | GP2Y0E03 | :heart: | I2C | `Sensor::GP2Y0E03` | Infrared, 40 - 500mm
139
+
140
+ ## Inertial Measurement Units
141
+
142
+ | Name | Status | Interface | Component Class | Notes |
143
+ | :--------------- | :------: | :-------- | :--------------- |------ |
144
+ | ADXL345 | :heart: | I2C | `Sensor::ADXL345` | Accelerometer
145
+ | IT3205 | :heart: | I2C | `Sensor::IT3205` | Gyroscope
146
+ | HMC5883L | :heart: | I2C | `Sensor::HMC5883L` | Compass
147
+ | MPU6050 | :heart: | I2C | `Sensor::MPU6050` | Gyro + Accelerometer
148
+ | MPU6886 | :heart: | I2C | `Sensor::MPU6886` | Gyro + Accelerometer
149
+ | BMI160 | :heart: | I2C | `Sensor::BMI160` | Gyro + Accelerometer
150
+ | LSM6DS3 | :heart: | I2C | `Sensor:LSM6DS3` | Gyro + Accelerometer
151
+
152
+ ## Misc Sensors
153
+ | Name | Status | Interface | Component Class | Notes |
154
+ | :--------------- | :------: | :-------- | :--------------- |------ |
155
+ | INA219 | :heart: | I2C | `Sensor::INA219` | DC Current Sensor
156
+
157
+ ## Real Time Clocks
158
+
159
+ | Name | Status | Interface | Component Class | Notes |
160
+ | :--------------- | :------: | :-------- | :--------------- |------ |
161
+ | DS1302 | :heart: | I2C | `RTC::DS1302` |
162
+ | DS1307 | :heart: | I2C | `RTC::DS1307` |
163
+ | DS3231 | :green_heart: | I2C | `RTC::DS3231` | Alarms not implemented
164
+ | PCF8563 | :heart: | I2C | `RTC::PCF8563` |
165
+
166
+ ## GPS
167
+
168
+ | Name | Status | Interface | Component Class | Notes |
169
+ | :--------------- | :------: | :-------- | :--------------- |------ |
170
+ | GT-U7 | :heart: | UART | - |
171
+
172
+ ## Miscellaneous
173
+
174
+ | Name | Status | Interface | Component Class | Notes |
175
+ | :--------------- | :------: | :-------- | :--------------- |------ |
176
+ | Board EEPROM | :green_heart: | Built-In | `EEPROM::Board` | Arduino ARM boards have no EEPROM
177
+ | AT24C | :green_heart: | I2C | `EEPROM::AT24C` | I2C EEPROM (32, 64, 128 or 256 kib)
178
+ | MFRC522 | :heart: | SPI/I2C | `DigitalIO::MFRC522` | RFID tag reader / writer
data/README.md CHANGED
@@ -1,41 +1,60 @@
1
- # Denko 0.13.4 [![Test Status](https://github.com/denko-rb/denko/actions/workflows/ruby.yml/badge.svg)](https://github.com/denko-rb/denko/actions/workflows/ruby.yml)
2
- ### Ruby Meets Microcontrollers
3
- Denko gives you a high-level Ruby interface to low-level hardware, without writing microcontroller code. Use LEDs, buttons, sensors and more, just as easily as any Ruby object:
1
+ # denko
2
+ [![Test Status](https://github.com/denko-rb/denko/actions/workflows/ruby.yml/badge.svg)](https://github.com/denko-rb/denko/actions/workflows/ruby.yml)
3
+
4
+ <img src="images/demo.gif" width="540" height="360" alt="Milk-V mruby GPIO demo">
5
+
6
+ Program real-life electronics in Ruby. LEDs, buttons, sensors (and more) work just like any Ruby object:
4
7
 
5
8
  ```ruby
6
9
  led.blink 0.5
7
10
 
8
- lcd.print "Hello World!"
11
+ lcd.text "Hello World!"
9
12
 
10
13
  reading = sensor.read
11
14
 
12
- button.down do
13
- puts "Button pressed!"
14
- end
15
+ button.down { puts "Button pressed!" }
16
+ button.listen
15
17
  ```
16
18
 
17
- Denko doesn't run Ruby on the microcontroller (see [mruby-denko](#mruby-denko)). It runs custom Arduino firmware to expose its I/O interfaces over a socket. You run Ruby on your computer and talk to it. The microcontroller, and anything connected to it, map directly to Ruby objects. You get to think about your hardware and appplication logic, not everything in between.
19
+ ## How It Works
20
+
21
+ <img src="images/layer_diagram.png" width="820" height="540" alt="Denko Layer Diagram">
18
22
 
19
- High-level abstraction in Ruby makes hardware classes easy to implement, with intuitive interfaces. They multitask a single core microcontroller, with thread-safe state, and callbacks for inputs. If you need more I/O, integration is seamless; connect another board and instantiate it in Ruby.
23
+ Denko aims to provide a Ruby API for you to directly control physical peripherals, while abstracting all the hardware and software complexity in between. There are currently 3 supported "stacks":
20
24
 
21
- ### Supported Hardware
25
+ ### Connected Microcontroller
26
+ - Flash a [supported microcontroller](MICROCONTROLLERS.md) with the Denko firmware
27
+ - Connect it to a PC running Ruby, over Serial, Ethernet, or Wi-Fi
28
+ - The microcontroller does the "low-level" signal work, appearing as an instance of `Denko::Board` in Ruby
29
+ - Ruby peripheral drivers, running on the PC, do the "high-level" work
22
30
 
23
- Full list of supported mircocontroller platforms, interfaces, and peripherals is located [here](HARDWARE.md).
31
+ ### Single-Board-Computer
32
+ - Install [denko-piboard](https://github.com/denko-rb/denko-piboard) on a Linux SBC
33
+ - The included C extention makes the SBC's GPIO header available via a `Denko::PiBoard` instance
34
+ - Use it in Ruby programs, self-contained on the SBC
24
35
 
25
- ##### denko-piboard
26
- The [denko-piboard](https://github.com/denko-rb/denko-piboard) add-on gem, uses a Raspberry Pi's built in GPIO header instead of an attached microcontroller. Connect things directly to the Pi, and use the peripheral classes from this gem.
36
+ ### mruby on Milk-V Duo
37
+ - Download `mruby` and/or `mirb` binaries from the [mruby-denko-milkv-duo](https://github.com/denko-rb/mruby-denko-milkv-duo) repo onto your Milk-V Duo
38
+ - Everything is included. Instances of `Denko::Board` in mruby will use the Milk-V's GPIO
27
39
 
28
- ##### mruby-denko
29
- A solo Raspberry Pi (or other SBC + microcontroller) is great if you need the compute power anyway, but what if you don't? Why not run Ruby on the microcontroller itself?
40
+ **Notes:**
41
+ - Peripheral drivers are implemented __only__ in this gem, and the source files are used by __all__ stacks
42
+ - That makes the [examples folder](examples) in this gem relveant to all (ignoring hardware incompatibilities)
43
+ - If using `denko-piboard` or `mruby-denko-milkv-duo`, ignore the hardware and installation sections here
30
44
 
31
- That's the goal of [mruby-denko](https://github.com/denko-rb/mruby-denko): write mruby on the ESP32, using peripheral classes as close to this gem as possible. Still early in development, so limited features, but already usable.
45
+ ## Supported Hardware
46
+ - [Peripherals](PERIPHERALS.md)
47
+ - [Microcontrollers](MICROCONTROLLERS.md)
48
+ - [Single Board Computers](https://github.com/denko-rb/denko-piboard?tab=readme-ov-file#support)
49
+ - [Milk-V Duo Boards](https://github.com/denko-rb/mruby-denko-milkv-duo?tab=readme-ov-file#supported-hardware)
32
50
 
33
- ## Getting Started
51
+ ## Installation
34
52
 
35
- **Note:** If using Windows, you can follow the Mac/Linux instructions in WSL, but it is not recommended. Serial (COM port) forwarding isn't working on WSL2, which means you can't communicate with the board. There are workarounds, and it might work on WSL1, but the [RubyInstaller for Windows](https://rubyinstaller.org/) and Arduino IDE are recommended instead. A Linux virtual machine with USB passthrough works too.
53
+ **Note:** On Windows you can follow the Mac/Linux instructions in WSL, but it isn't recommended. Serial (COM port) forwarding isn't working on WSL2, which means you can't communicate with the board. There are workarounds, and it might work on WSL1, but the [RubyInstaller for Windows](https://rubyinstaller.org/) and Arduino IDE are recommended instead. A Linux virtual machine with USB passthrough works too.
36
54
 
37
55
  #### 1. Install the Gem
38
- ```shell
56
+
57
+ ```console
39
58
  gem install denko
40
59
  ```
41
60
 
@@ -44,73 +63,83 @@ gem install denko
44
63
  Get the Arduino IDE [here](http://arduino.cc/en/Main/Software) for a graphical interface (recommended for Windows), or use the command line interface from [here](https://github.com/arduino/arduino-cli/releases), or Homebrew.
45
64
 
46
65
  **CLI Installation with Homebrew on Mac or Linux:**
47
- ```shell
66
+
67
+ ```console
48
68
  brew update
49
69
  brew install arduino-cli
50
70
  ```
51
71
 
52
72
  #### 3. Install Arduino Dependencies
73
+
53
74
  Denko uses Arduino cores, which support different microcontrollers, and a few libraries. Install only the ones for your microcontroller, or install everything. There are no conflcits. Instructions:
54
- * [Install Dependencies in IDE](DEPS_IDE.md)
55
- * [Install Dependencies in CLI](DEPS_CLI.md)
75
+
76
+ - [Install Dependencies in IDE](DEPS_IDE.md)
77
+ - [Install Dependencies in CLI](DEPS_CLI.md)
56
78
 
57
79
  #### 4. Generate the Arduino Sketch
80
+
58
81
  The `denko` command is included with the gem. It will make the Arduino sketch folder for you, and configure it.
59
82
 
60
83
  **Example for ESP32 target on both serial and Wi-Fi:**
61
- ```shell
84
+
85
+ ```console
62
86
  denko sketch serial --target esp32
63
87
  denko sketch wifi --target esp32 --ssid YOUR_SSID --password YOUR_PASSWORD
64
88
 
65
89
  # For more options
66
90
  denko targets
67
91
  ```
92
+
68
93
  **Note:** Boards flashed with a Wi-Fi or Ethernet sketch will [listen for a TCP connection](examples/connection/tcp.rb), but fall back to Serial when there is none active.
69
94
 
70
95
  #### 5a. IDE Flashing
71
96
 
72
- * Connect the board to your computer with a USB cable.
73
- * Open the .ino file inside your sketch folder with the IDE.
74
- * Open the dropdown menu at the top of the IDE window, and select your board.
75
- * Press the Upload :arrow_right: button. This will compile the sketch, and flash it to the board.
97
+ - Connect the board to your computer with a USB cable.
98
+ - Open the .ino file inside your sketch folder with the IDE.
99
+ - Open the dropdown menu at the top of the IDE window, and select your board.
100
+ - Press the Upload :arrow_right: button. This will compile the sketch, and flash it to the board.
76
101
 
77
102
  **Troubleshooting:**
78
- * If your serial port is in the list, but the board is wrong, select the serial port anyway, then you will be asked to manually select a board.
79
- * If your board doesn't show up at all, make sure it is connected properly. Try disconnecting and reconnecting, use a different USB port or cable, or press the reset button after plugging it in.
80
- * Some boards may be in a state where you have to hold their "boot" button while cycling power (reconnect or reset) for them to enter firmware update mode. Eg. Raspberry Pi Pico, ESP32-S2/S3.
103
+
104
+ - If your serial port is in the list, but the board is wrong, select the serial port anyway, then you can manually select a board.
105
+ - If your board doesn't show up at all, make sure it is connected properly. Try disconnecting and reconnecting, use a different USB port or cable, or press the reset button after plugging it in.
106
+ - Some boards can get into a state where you have to hold their "boot" button while cycling power (reconnect or reset) for them to enter firmware update mode. Eg. Raspberry Pi Pico, ESP32-S2/S3.
81
107
 
82
108
  #### 5b. CLI Flashing
83
109
 
84
- * The path output by `denko sketch` earlier is your sketch folder. Keep it handy.
85
- * Connect the board to your computer with a USB cable.
86
- * Check if the CLI recognizes it:
110
+ - The path output by `denko sketch` earlier is your sketch folder. Keep it handy.
111
+ - Connect the board to your computer with a USB cable.
112
+ - Check if the CLI recognizes it:
87
113
 
88
- ```shell
114
+ ```console
89
115
  arduino-cli board list
90
116
  ```
91
-
92
- * Using the Port and FQBN (Fully Qualified Board Name) shown, compile and upload the sketch:
93
- ```shell
117
+
118
+ - Using the Port and FQBN (Fully Qualified Board Name) shown, compile and upload the sketch:
119
+
120
+ ```console
94
121
  arduino-cli compile -b YOUR_FQBN YOUR_SKETCH_FOLDER
95
122
  arduino-cli upload -v -p YOUR_PORT -b YOUR_FQBN YOUR_SKETCH_FOLDER
96
123
  ```
97
124
 
98
125
  **Troubleshooting:**
99
- * Follow the same steps as the IDE method above. List all FQBNs using:
100
- ```shell
126
+
127
+ - Follow the same steps as the IDE method above. List all FQBNs using:
128
+
129
+ ```console
101
130
  arduino-cli board listall
102
131
  ```
103
132
 
104
133
  #### 6. Test It
105
134
 
106
- Most boards have a regular LED on-board. Test it with the [blink](examples/led/builtin_blink.rb) example. If you have an on-board WS2812 LED (Neopixel), use the [WS2812 blink](examples/led/ws2812_builtin_blink.rb) example instead. If it starts blinking, you're ready for Ruby!
135
+ Most boards have a regular LED on-board. Test with the [blink](examples/led/builtin_blink.rb) example. If you have an on-board WS2812 LED (Neopixel), use the [WS2812 blink](examples/led/ws2812_builtin_blink.rb) example instead. If it starts blinking, you're ready for Ruby!
107
136
 
108
137
  ## Examples and Tutorials
109
138
 
110
139
  #### Tutorial
111
140
 
112
141
  - [Here](tutorial) you will find a beginner-friendly tutorial, that goes through the basics, using commented examples and diagrams. Read the comments and try modifying the code. You will need the following:
113
- - 1 compatible microcontroller (see [supported hardware](HARDWARE.md))
142
+ - 1 [compatible microcontroller](MICROCONTROLLERS.md)
114
143
  - 1 button or momentary switch
115
144
  - 1 potentiometer (any value)
116
145
  - 1 external RGB LED (4 legs common cathode, not a Neopixel or individually addressable)
@@ -118,24 +147,10 @@ Most boards have a regular LED on-board. Test it with the [blink](examples/led/b
118
147
  - Current limiting resistors for LEDs
119
148
  - Breadboard
120
149
  - Jumper wires
121
-
122
- **Tip:** Kits are a cost-effective way to get started. They will almost certainly include these parts, plus more, getting you well beyond the tutorial.
150
+
151
+ **Tip:** Kits are a good way to get started. They include even more, and get you well beyond the tutorial.
123
152
 
124
153
  #### Included Examples
125
154
 
126
- - The [examples](examples) folder contains at least one example per supported peripheral, demonstrating its interface, and a few that use multiple peripherals together.
155
+ - The [examples](examples) folder contains at least one example per peripheral, demonstrating its interface.
127
156
  - Each example should incldue a wiring diagram alongside its code (still incomplete).
128
-
129
- #### More Examples
130
-
131
- **Note:** This gem was renamed from `dino` to `denko`. Some of these examples use the old name.
132
-
133
- - Try [Getting Started with Arduino and Dino](http://tutorials.jumpstartlab.com/projects/arduino/introducing_arduino.html) from [Jumpstart Lab](http://jumpstartlab.com) (_ignore old install instructions_).
134
- - An example [rails app](https://github.com/austinbv/dino_rails_example) using Dino and Pusher.
135
- - For a Sinatra example, look at the [site](https://github.com/austinbv/dino_cannon) used to shoot the cannon at RubyConf2012.
136
-
137
- ## Explanatory Talks
138
-
139
- - "Arduino the Ruby Way" at RubyConf 2012
140
- - [Video by ConFreaks](https://www.youtube.com/watch?v=oUIor6GK-qA)
141
- - [Slides on SpeakerDeck](https://speakerdeck.com/austinbv/arduino-the-ruby-way)