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/CHANGELOG.md CHANGED
@@ -1,5 +1,392 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.15.0
4
+
5
+ ### New Platform
6
+
7
+ Denko now runs on mruby! This means it can run on smaller devices. The first of these is the:
8
+
9
+ - Milk-V Duo
10
+ - Same footprint as Raspberry Pi Pico
11
+ - Runs Buildroot Linux on a 1GHz RISC-V CPU
12
+ - Prebuilt binaries and instructions available [here](https://github.com/denko-rb/mruby-denko-milkv-duo)
13
+ - Limitations:
14
+ - UART not supported yet. Consequently, the `JSNSR04T` sensor won't be fully supported either.
15
+ - Duo has no on-board DAC, but `AnalogIO::Output` should work when support for external DACs is added.
16
+
17
+ ### Updated Platforms
18
+
19
+ - See [denko-piboard](https://github.com/denko-rb/denko-piboard) release notes for its matching 0.15.0 release. This is Denko for "big" Linux SBCs running CRuby.
20
+
21
+ ### New Peripherals
22
+
23
+ - `AnalogIO::Joystick` -
24
+ - MultiPin. Give `x:` and `y:` in `:pins` of initialize. Both must be analog input capable.
25
+ - Inversion configurable, per axis
26
+ - Axes are swappable
27
+ - Deadzone and maxzone configurable, _NOT_ per axis
28
+
29
+ - `DigitalIO::PCF8574` -
30
+ - 8-bit (channel) bi-directional I/O expander over I2C
31
+ - Is a `BoardProxy` so `DigitalIO` components may treat it as `Board`. Not recommended for fast inputs.
32
+ - Common in "backpacks" attached to HD44780 LCDs. See [example](examples/display/hd44780_thru_pcf8574.rb)
33
+
34
+ - `Display::IL0373` :
35
+ - 212 x 104 pixel E-Paper display over SPI
36
+ - Black/White and Black/Red/White versions supported (B/R/W version not tested in hardware)
37
+ - Hardware controls: black channel inversion, H/V reflection, rotation
38
+
39
+ - `Display::PCD8544` -
40
+ - 84 x 48 pixel backlit mono LCD over SPI
41
+ - Old design from Nokia phones in late 90's and early 00's
42
+ - Hardware controls: inversion, contrast (Vop), bias
43
+ - Gotcha: Pixels appear to have an aspect ratio of about 0.8
44
+
45
+ - `Display::SH1107` -
46
+ - 128 x 128 mono OLED over I2C or SPI
47
+
48
+ - `Display::SSD1680` -
49
+ - 296 x 128 pixel E-Paper display over SPI
50
+ - Black/White and Black/Red/White versions supported
51
+ - Hardware controls: black channel inversion, horizontal reflection
52
+
53
+ - `Display::SSD1681` -
54
+ - 200 x 200 pixel variation of SSD1680
55
+
56
+ - `Display::ST7302` -
57
+ - 250 x 122 pixel mono reflective LCD over SPI
58
+ - Hardware controls: inversion, refresh rate
59
+
60
+ - `Display::ST7565` -
61
+ - 128 x 64 pixel backlit LCD over SPI
62
+ - Hardware controls: inversion, H/V reflection, rotation, brightness
63
+
64
+ - `EEPROM::AT24C` -
65
+ - 32, 64 128 or 256 kib EEPROM over I2C
66
+ - Direct read/write with interface similar to Array. `#[]` and `#[]=`
67
+
68
+ - `Sensor::AHT3X` -
69
+ - Temperature + Relative Humidity sensor over I2C
70
+
71
+ - `Sensor::HDC1080` -
72
+ - Temperature + Relative Humidity sensor over I2C
73
+ - Can also monitor battery level. `#battery_low?` is true when VCC < 2.8V.
74
+
75
+ - `Sensor::JSNSR04T` -
76
+ - Waterproof ultrasonic distance sensor, similar to HC-SR04
77
+ - Mode 1 supported by `Sensor::HCSR04` class
78
+ - This new class only supports mode 2 (UART mode)
79
+ - Requires `board:` AND `uart:` in initialize hash
80
+ - UART must be set to 9600 baud beforehand
81
+
82
+ - `Sensor::SHT4X` -
83
+ - Temperature + Relative Humidity sensor over I2C
84
+
85
+ - `Sensor::VL53L0X` -
86
+ - Laser distance sensor over I2C
87
+ - 20 - 2000mm range
88
+ - Only continuous mode implemented. No configuration yet.
89
+ - Has `#smoothing=` and `#smoothing_size=` for moving averages, like `AnalogIO::Input`
90
+
91
+ ### Peripheral Changes
92
+ - `Display::Canvas` -
93
+ - `#print` changed to `#text`
94
+ - `#print_char` changed to `#draw_char`
95
+ - All drawing methods (`#set_pixel`, `#line`, `#circle` etc.) changed to only take keyword arguments
96
+ - Removed all `#filled_*` methods. Give `filled: true` to any shape method for the same result instead.
97
+ - Added `#current_color=` to set the default color for drawing when `color:` not given
98
+ - Fonts can be any size and don't need to align to page boundaries now
99
+ - Unset pixels/bits in fonts are now ignored (effectively transparent)
100
+ - Added more fonts
101
+ - Added integer scaling for fonts
102
+ - Added `#rotate(degrees)`
103
+ - Added `#reflect(axis)`, `#reflect_x`, and `#reflect_y`
104
+ - Optimized `#line` to use only integer math, avoid float
105
+ - Added support for multicolor e-paper displays
106
+ - Handled as array of 1-bit framebuffers, one per ink color
107
+ - __Not__ real multi-bit color yet
108
+
109
+ - `Display::HD44780` -
110
+ - `#print` changed to `#text`, and `#set_cursor` to `#text_cursor` for consistency with `Display::Canvas`
111
+ - Added backlight as a subcomponent
112
+ - Give positive pin (anode) as `backlight:` in `pins:` hash when initializing
113
+ - `HD44780#backlight` is an instance of `Denko::LED::Base`
114
+ - Use like: `lcd.backlight.on` / `lcd.backlight.off`, or (if connected to PWM) `lcd.backlight.duty=`
115
+
116
+ - `Display::MonoOLED` -
117
+ - Removed `rotate:` option from `#initialize`
118
+ - Added `#reflect_x`, `#reflect_y` and `#rotate` methods instead, to match the interface of other displays
119
+ - Affects `SSD1306`, `SH1106` and `SH1107` OLEDs
120
+
121
+ - `EEPROM::Board` -
122
+ - Renamed from `EEPROM::BuiltIn`
123
+ - Simplified interface, matching `EEPROM::AT24C`
124
+ - Only provides `[]` and `[]=`, for individual values or ranges
125
+ - Both block, and read/write hardware immediately, rather than caching state
126
+
127
+ - `LED::RBG` -
128
+ - Changed `#write(r,g,b)` so it takes percentages (0-100)
129
+ - Added `#write_8_bit` that takes an 8 bit range (0-255), regardless of the underlying PWM settings
130
+
131
+ - `Sensor::DHT` reset pulse changed from 20ms to 10ms. Within spec, and appears more reliable in testing.
132
+
133
+ ### Behavior Changes
134
+ - Raw Read Rework
135
+ - `Behavior::State`, `Behavior::Callbacks`, `Behavior::Reader`, `Behavior::Poller`, and `Behavior::Listener` have received a combined rework, allowing "raw_reads".
136
+ - A raw read bypasses the "update pathway": `#pre_callback_filter`, and `#update`, which would run callbacks and update component state.
137
+ - This simplifies development of drivers for things like sensors, where config and calibration data needs to be passed back and forth, but can't hit the update pathway. The old behavior is still available, for actual sensor data.
138
+ - `#_read` is a delegate method. Define it to get a single sensor reading, expected to hit the update pathway.
139
+ - `#_read` should _never_ be called directly now, as it might conflict with raw reads.
140
+ - Use `#read_nb` to trigger an async read instead. It delegates to `#_read` in a way that won't conflict.
141
+ - `#read` is now the same as `#read_nb`, except blocking.
142
+ - `#read_raw` _always_ blocks. Use it to get raw data (no `#pre_callback_filter`), and _not_ hit the update pathway.
143
+ - `#read_raw` _cannot_ be called if the component is currently listening. No way to gaurantee message order. Stop listening first.
144
+ - `#read_raw` takes a method object or Proc. It does _not_ delegate to `#_read`, since it's not meant for sensor data.
145
+
146
+ - Mutex Rework
147
+ - `Mutex#lock` and `Mutex#unlock` now preferred over `Mutex#synchronize`, so mruby doesn't have to pass a block around.
148
+ - `Mutex` instances are all replaced with `MutexStub` instances in mruby, and CRuby.
149
+ - `Component#state` (reading) is no longer protected by a mutex, unless it's a simple Integer.
150
+ - `Component#state=` (writing) is still portected by `@state_mutex`.
151
+
152
+ - `SPI::Peripheral::SinglePin` removed. It's simpler to use `SPI::Peripheral::MultiPin` (now renamed to `SPI::Peripheral`) for everything instead.
153
+
154
+ ### Microcontroller Changes
155
+
156
+ - Arduino Core Version Updates:
157
+ - ESP32 Arduino Core -> 3.2.0
158
+ - NOTE: HW CDC (UART) is still broken when sending large amounts of data both directions. If using an ESP32 board that has a USB port with a USB-UART chip (not native USB), that will be more reliable for now.
159
+ - All other cores -> latest released version
160
+
161
+ - Arduino Library Version Updates:
162
+ - Adafruit NeoPixel -> 1.15.1
163
+ - ESP32Servo -> 3.0.6
164
+ - IRremote -> 4.4.2
165
+
166
+ - Arduino Uno R4 (Minima and Wi-Fi):
167
+ - WS2812 RGB LEDs are now supported by the NeoPixel library on the RA4M1, so enabled for these
168
+
169
+ - ATmega168-based microcontrollers:
170
+ - Removed OneWire support from default build config and replaced with bit-bang UART
171
+
172
+ - AUX_SIZE:
173
+ - AUX_SIZE reduced to 528 bytes for almost all microcontrollers, and still 48 for ATmega168
174
+ - Most implemented interfaces (except infrared) work fine sending/receiving data in chunks. This allows 512 byte chunks, even if using 16 bytes for configuration etc.
175
+
176
+ - SPI transfer size limits:
177
+ - SPI transfer sizes are now sent as 12-bit unsigned integers. This allows for a theoretical limit of 4095 bytes per SPI transaction, but AUX_SIZE is lower by default, so 520 (528 - 8 config bytes) is the practical limit, more than doubling the previous 255.
178
+
179
+ ### Board Interface Changes
180
+
181
+ - `Board` classes must implement `#spi_limit`, which returns the maximum size (in bytes) of a SPI transaction. The same value is used for both reading and writing.
182
+
183
+ - `Board` classes must implement `#pin_is_pwm?(pin)`. This takes a pin number and returns true if __that pin number is muxed to a hardware PWM output that cannot be remuxed__. This is only relevant on Linux, where calling something like `#digital_write` on a hardware PWM output does nothing, so we want to mimic it with PWM values instead.
184
+
185
+ - `Board` classes must implement `#pwm_write(pin, duty)` so that the second argument is always the duty cycle in nanoseconds, not a percentage, or based on PWM timer bit-depth.
186
+ - The only exception is connected microcontrollers on Arduino firmware. PWM period may not always be controllable (or even known), so use values based on PWM timer bit-depth. This is handled conditionally inside `PulseIO::PWMOutput`.
187
+
188
+ - `Board#one_wire_reset` arguments changed from `(pin, read_presence=0)` to `(pin, read_presence=false)`. Any truthy value will update the bus' with the presence result.
189
+
190
+ ### Driver convergence with mruby
191
+ - Many classes had small changes made to avoid using CRuby features not available in mruby. These include:
192
+ - Avoid using `Integer#[]` to get specific bits
193
+ - Avoid using `Array#pack`
194
+ - Avoid using regexes entirely
195
+ - Avoid `super if defined?(super)`
196
+ - Use `begin; super; rescue NoMethodError; end`
197
+
198
+ ### Bug Fixes
199
+ - Fixed bug where `Display::HD44780` would try to call `#board_has_write_bit?` instead of `#board.is_register?`.
200
+ - Fixed a bug with multiple enviro sensors where calling `#state` would reset the values of all keys to `nil`.
201
+ - Fixed bug where `Canvas#polygon` and `#path` were not passing through color to sub-methods.
202
+ - Fixed a bug where `Behavior::MultiPin` would try to convert pins given as `nil` to Integer, creating unnecesary subcomponents on pin `0`.
203
+ - Shortened `Sensor::DHT` reset time to 10ms, which works more reliably.
204
+ - Write twice before rading for `Sensor::RCWL9620`, which works more reliably.
205
+
206
+ ## 0.14.0
207
+
208
+ ### Known Issues
209
+
210
+ - ESP32 Boards
211
+ - **USB-CDC (aka native USB) appears to be broken** in the 3.0 core. Will eventually hang if sending a lot of data both directions at the same time. Use one of the standard UART interfaces until this is fixed.
212
+
213
+ ### New Boards
214
+
215
+ - ESP32-H2 and ESP32-C6 variants (`--target esp32`):
216
+ - Depends on ESP32 Arduino Core 3.0+
217
+ - No WiFi on H2
218
+
219
+ ### Board Changes
220
+
221
+ - ESP32 Boards
222
+ - 3.0+ version of the ESP32 Arduino Core now required.
223
+
224
+ - Raspberry Pi Pico (RP2040)
225
+ - WS2812 LED strips work now.
226
+
227
+ ### New Peripherals
228
+
229
+ - Bit-Bang I2C:
230
+ - Class: `Denko::I2C::BitBang`
231
+ - Start a software bit-banged I2C bus on any 2 pins.
232
+ - Interchangeable with hardware bus (`Denko::I2C::Bus`), as far as I2C peripherals are concerned.
233
+
234
+ - ADS1100 Analog-to-Digital Converter:
235
+ - Class: `Denko::AnalogIO::ADS1100`
236
+ - Connects via I2C bus. Driver written in Ruby.
237
+ - Modeled after `AnalogIO::Input` since it's a single channel ADC.
238
+ - Can be read directly with `#read` or polled with `#poll`.
239
+ - Full scale voltage must be given in the initailize hash, `full_scale_ voltage:`.
240
+ - Gain and sample rate configurable. See example for more.
241
+
242
+ - SSD1306 1-Color OLED
243
+ - Added SPI version.
244
+ - Both use `Denko::Display::SSD1306`. Instances mutate to I2C or SPI behavior, based on bus given.
245
+
246
+ - SH1106 1-Color OLED
247
+ - Class: `Denko::Display::SH1106`
248
+ - Almost the same as SSD1306. Most driver code is shared between them.
249
+ - I2C and SPI versions both supported, as SSD1306 above.
250
+
251
+ ### Peripheral Changes
252
+
253
+ - All Peripherals:
254
+ - On CRuby, `@state_mutex` and `@callback_mutex` are now instances of `Denko::MutexStub`, which just runs the given block when called with `#synchronize`.
255
+ - The options hash (now called params), given to `#initialize` is always available through the `#params` method.
256
+ - `#initialize` no longer accepts `pullup: true` or `pulldown: true`. Set mode explicitly, like `mode: :input_pullup`.
257
+
258
+ - Temperature / Pressure / Humidity Sensors:
259
+ - `DS18B20`, `DHT` and `HTU21D` readings now match all the others (Hash with same keys).
260
+ - Readings standardized to be in ºC, %RH and Pascals. Callbacks always receive hash with these.
261
+ - `[]` access for `@state` removed removed. Use `#temperature`, `#pressure`, `#humidity` instead.
262
+ - Added `#temperature_f` `#temperature_k` `#pressure_atm` `#pressure_bar` helper conversion methods.
263
+ - `#read` methods standardized to always read ALL sub-sensors. Affects `HTU21D` and `BMP180`.
264
+
265
+ - `AnalogIO::Input`:
266
+ - Added `#smoothing=` and `#smoothing_size=` accessors to `AnalogIO::Input` for configuration.
267
+ - `AnalogIO::Sensor` removed. Use `Input` instead.
268
+
269
+ - `Behavior::InputPin`
270
+ - Added `#debounce=(time)` which just calls `Board#set_pin_debounce` for the pin. Only on `PiBoard`.
271
+
272
+ - `DigitalIO::CBitBang`:
273
+ - New helper class. Forces initialize validation for bit-bang pins. Essential for `PiBoard`.
274
+ - As a side-effect, makes sure 2 low-level bit-bang Components (eg. buses) can't use the same pin.
275
+ - Always starts pins in `:input` mode. The bit-bang routine is expected to change them.
276
+
277
+ - `DigitalIO::RotaryEncoder`:
278
+ - Pin names standardized to `a:` and `b:`, but still accept `:clock`, `:data`, `:clk`, `:dt`.
279
+ - `steps_per_revolution` changed to `counts_per_revolution`
280
+ - Every level change is counted now (full-quadrature). Was half-quadrature before.
281
+ - `counts_per_revolution` now defaults to 60 instead of 30 (generic 30-detent encoders).
282
+ - `state` and callback hash store `:count` instead of `:steps`.
283
+
284
+ - `I2C::Bus`:
285
+ - No longer requires SDA pin to initialize.
286
+ - Accepts `index:` param (default 0) on initialize, specifying which I2C interface to use.
287
+ - Only works for PiBoard on Linux right now.
288
+ - `#update` accepts String of comma delimited ASCII numbers (Board), or Array of bytes (PiBoard).
289
+
290
+ - `I2C::Peripheral`:
291
+ - `#i2c_read` arg order changed from `(register, num_bytes)` to `(num_bytes, register: nil)`
292
+
293
+ - `LED`:
294
+ - `Base`, `RGB` and `SevenSegment` all inherit from `PulseIO::PWMOutput`, so see that below.
295
+ - `#write` MUST always be given a PWM value if used, not `0` or `1`.
296
+ - Prefer using `duty=` if possible, which is percentage based.
297
+ - Alternatively, call `#digital_write` only to stay in faster digital mode.
298
+
299
+ - `LED::RGB`:
300
+ - `#write` takes 3 regular args now. Use `*array` instead to pass an array.
301
+ - `#color` only takes a symbol for one of the predefined colors (or `:off`) now.
302
+
303
+ - `Motor::Stepper`:
304
+ - `#step_cc` renamed to `#step_ccw`.
305
+
306
+ - `OneWire::Bus`:
307
+ - `#update` accepts String of comma delimited ASCII numbers (Board), or Array of bytes (PiBoard).
308
+
309
+ - `PulseIO::IRTransmitter`:
310
+ - Renamed to `PulseIO::IROutput` to be more consistent with other classes.
311
+ - `#emit` renamed to `#write` for consistency.
312
+
313
+ - `PulseIO::PWMOutput`:
314
+ - `#write` will never try to call `#digital_write`, always `#pwm_write`.
315
+ - Initial mode is `:output` instead of `:output_pwm`, saving MCU PWM channels until needed.
316
+ - Mode change is lazy. Happens with first call to `#pwm_write`.
317
+ - Call only `#digital_write` to stay in digital `:output` mode (faster).
318
+ - Added `#duty=`. Set duty cycle in percentage regardless of PWM resolution.
319
+ - Set resolution and frequency per `PWMOutput` instance (pin), instead of per `Board` instance:
320
+ - `#initialize` hash accepts `frequency:` and `resolution:` keys.
321
+ - Call `#pwm_enable` with `frequency:` and `resolution:` kwargs
322
+ - Or use `#resolution=` and `#frequency=` methods.
323
+ - Defaults are 1 kHz frequency and 8-bit resolution.
324
+ - **ONLY** works on ESP32 and `PiBoard` right now. Others still control at the Board level.
325
+ - Limited to 13-bit resolution on `Denko::Board` for now.
326
+
327
+ - `SPI::Bus`:
328
+ - Accepts `index:` param (default 0) on initialize, specifying which SPI interface to use.
329
+ - Only works for PiBoard on Linux right now.
330
+
331
+ - `SPI::Peripheral`:
332
+ - Split into `SPI:Peripheral::SinglePin` and `Spi::Peripheral::MultiPin` to allow modeling more complex peripherals.
333
+ - `#update` accepts String of comma delimited ASCII numbers (Board), or Array of bytes (PiBoard).
334
+
335
+ - `SPI::OutputRegister`:
336
+ - Removed automatic buffering of writes.
337
+ - Call `#set_bit(value)` instead to modify state in memory, without writing to the physical register.
338
+ - Call `#write` to send state to the register after modifying.
339
+
340
+ ### Fiwmare Changes
341
+
342
+ - General:
343
+ - Boards now report their serial buffer as 8 bytes less than the actual buffer size.
344
+ - Removed local callback hooks (meant for customization in C) from the Arduino sketches.
345
+ - Improved serial interface selection for ATSAMD21 boards. Some boards have the native interface as `Serial`, some as `SerialUSB`. The native interface is always selected now, regardless of its name.
346
+ - More accurate pin counts when initializing digital listener storage for different boards.
347
+
348
+ - Core I/O:
349
+ - Removed `INPUT_OUTPUT` mode. Only ESP32 used it and it's the same as `OUTPUT`.
350
+ - Added an optimized single-byte binary message type for `#digital_write`. Improves write throughput 6-7x. Only works for pins 0..63. Fallback automatic for higher pins.
351
+
352
+ - Hardware I2C:
353
+ - Message format changed so "value" isn't used. Will be used for differentiating multiple I2C interfaces in future.
354
+ - Responses now prefixed with `I2C{index}:` (index = I2C device integer, always 0 for now), instead of SDA pin number.
355
+
356
+ - Hardware SPI:
357
+ - Transfers don't need a chip select pin now. This is for LED strips like APA102.
358
+
359
+ - Bit-Bang I2C:
360
+ - Newly added. Works similar to Bit-Bang SPI.
361
+
362
+ ### Board Interface Changes
363
+
364
+ - `Board#set_pin_mode` now takes a third hash argument, `options={}`. Only used keys are `resolution:` and `frequency:` for setting PWM resolution. Only works on ESP32 boards and `PiBoard` on Linux.
365
+
366
+ - Added `Board#set_pin_debounce`
367
+ - Implemented for Linux GPIO alerts in `Denko::PiBoard` (denko-piboard gem).
368
+ - Sets a time (in microseconds) that level changes on a pin must be stable for, before an update happens.
369
+ - Does nothing for `Denko::Board`.
370
+
371
+ - Added `OUTPUT_OPEN_DRAIN` and `OUTPUT_OPEN_SOURCE` pin modes to support `PiBoard`.
372
+
373
+ ### CLI Changes
374
+
375
+ - All Atmel targets now prefixed with "at". Eg. `atsamd21` now, instead of `samd21` before.
376
+
377
+ ### Bugs Fixed
378
+
379
+ - ADS111X sensors were incorrectly validating sample rate when set.
380
+ - Handshake could fail if board was left in a state where it kept transmitting data.
381
+ - An ESP32 with no DACs might not release a LEDC channel after use.
382
+ - `Denko::Connection` could have negative bytes in transit, making it overflow the board's rx buffer.
383
+ - `Servo`, `Buzzer` and `IRTransmitter` didn't start in `:output_pwm` mode.
384
+ - `SSD1306#on` and `#off` would raise errors, trying to write Integer instead of Array to `I2C::Bus`.
385
+ - `SPI::BitBang` did not correctly set initial clock state for modes 2 and 3.
386
+ - `IRTransmitter.emit` didn't work at all ESP8266. Pulse data wasn't aligned properly in memory.
387
+ - `Board#ws2812_write` was validating max length to 256 instead of 255.
388
+ - WS2812 write on ESP32 would crash it, only with *some* low 8-bit pixel values. Still unsure why, but four extra 0 bytes (preceding the pixel data in auxMsg) seems to work around this.
389
+
3
390
  ## 0.13.5
4
391
 
5
392
  ### New Components
@@ -88,7 +475,7 @@
88
475
 
89
476
  - WS2812
90
477
  - Larger aux message size now allows up to 256 pixels (3 bytes per pixel) on a strip
91
-
478
+
92
479
  ### Bug Fixes
93
480
 
94
481
  - Fixed a bug with WS2812 strips where it would try to memcpy 3x the number of necessary bytes. Fixed this by just sending the total number of bytes to write to the strip, rather than number of pixels * bytes per pxiel.
@@ -221,7 +608,7 @@ Fixes critical 1-Wire bugs introduced when namespace was reorganized for 0.13.0.
221
608
  - Connects via I2C bus. Driver written in Ruby.
222
609
  - All features in the datasheet are implemented, except status checking.
223
610
  - Both are mostly identical, except for BMP280 lacking humidity.
224
-
611
+
225
612
  - HTU21D Temperature + Humidity Sensor:
226
613
  - Class: `Denko::Sensor::HTU21D`
227
614
  - Connects via I2C bus. Driver written in Ruby.
@@ -314,7 +701,7 @@ See new examples in the [examples](examples) folder to learn more.
314
701
  - This solves compatibility with boards that the library didn't work on.
315
702
  - `HD44780#create_char` allows 8 custom characters to be defined in memory addresses 0-7.
316
703
  - `HD44780#write` draws the custom (or standard) character from a given memory address.
317
-
704
+
318
705
  - `Denko::PulseIO::PWMOutput` (previously `Denko::Components::Basic::AnalogOutput`):
319
706
  - Changed `#analog_write` to `#pwm_write`.
320
707
  - Added `#pwm_enable` and `#pwm_disable` methods.
@@ -340,7 +727,7 @@ See new examples in the [examples](examples) folder to learn more.
340
727
  - All calls to `delayMicroseconds()` should be replaced with this.
341
728
  - Exposed in Ruby via `CMD=99`. It takes one argument, uint_16 for delay length in microsceonds.
342
729
  - `Board#micro_delay` and `Component::#micro_delay` are defined.
343
-
730
+
344
731
  - `dacWrite` function added to board library. `aWrite` function renamed to `pwmWrite`. Need this to avoid conflict between DAC, PWM and regular output on some chips.
345
732
 
346
733
  - CMD numbers for some board functions changed to accomodate dacWrite:
@@ -353,7 +740,7 @@ See new examples in the [examples](examples) folder to learn more.
353
740
  pulseread 11 -> 9
354
741
  servoToggle 8 -> 10
355
742
  servoWrite 9 -> 11
356
- ````
743
+ ````
357
744
 
358
745
  - `Board#analog_write` replaced by `Board#pwm_write` and `Board#dac_write`, matching the two C functions.
359
746
 
@@ -431,7 +818,7 @@ See new examples in the [examples](examples) folder to learn more.
431
818
  - WiFi version supports OTA (over-the-air) update in the Arduino IDE. Initial flash must still be done via serial.
432
819
  - Dev boards can map GPIOs to physical pins differently. Always look up the GPIO numbers and use those for pin numbers.
433
820
  - **Note:** SoftwareSerial and LiquidCrystal (LCD) both do not work on the ESP8266, and are excluded from the sketch.
434
-
821
+
435
822
  - ESP32 (`--target esp32`):
436
823
  - Works with either built in WiFi or Serial.
437
824
  - WiFi version does NOT support OTA (over-the-air) updates yet.
@@ -440,7 +827,7 @@ See new examples in the [examples](examples) folder to learn more.
440
827
  - **Note:** Servos and analog outputs share the `LEDC` channels on the board. Maximum of 16 combined.
441
828
  - **Note:** SoftwareSerial and LiquidCrystal (LCD) both do not work on the ESP32, and are excluded from the sketch.
442
829
  - **Note:** SPI bug exists where input modes don't match other platforms. Eg. For a register using mode 0 on AVR, mode 2 needs to be set on ESP32 for it to work. Using mode 0 misses a bit.
443
-
830
+
444
831
  - Arduino Due (`--target sam3x`) :
445
832
  - Up to 12-bit analog in/out. Pass a `bits:` option to `Board#new` to set resolution for both.
446
833
  - DAC support. Refer to DAC pins as `'DAC0'`, `'DAC1'`, just as labeled on the board. Call `#analog_write` or just `#write` on an `sensor` component that uses the pin.
@@ -463,7 +850,7 @@ See new examples in the [examples](examples) folder to learn more.
463
850
 
464
851
  - Infrared Emitter support. _Uses [Arduino-IRremote](https://github.com/z3t0/Arduino-IRremote), and the [ESP8266 fork](https://github.com/markszabo/IRremoteESP8266) where applicable._
465
852
 
466
- - Tone (piezo) support. _Uses Arduino `tone`,`noTone` functions._
853
+ - Tone (piezo) support. _Uses Arduino `tone`,`noTone` functions._
467
854
 
468
855
  - SoftwareSerial **(write only)**. _Uses Arduino `SoftSerial` library. Only tested on ATmega chips._
469
856
 
@@ -511,7 +898,7 @@ See new examples in the [examples](examples) folder to learn more.
511
898
 
512
899
  - `BoardProxy` abstraction for shift/SPI registers:
513
900
  - The `Register` classes implement enough of the `Board` interface to satisfy components based on `DigitalInput` and `DigitalOutput`, such as `Led` or `Button`.
514
- - This lets you call methods on components directly, rather than manipulating the register data to control components indirectly.
901
+ - This lets you call methods on components directly, rather than manipulating the register data to control components indirectly.
515
902
  - Initialize the appropriate `Register` object for the type of register. To initialize a component connected to the register, use the register as the `board:`, and give the parallel I/O pin on the register that the component is connected to. Pin 0 maps to the lowest bit.
516
903
  - This also works for `MultiPin` components built out of only `DigitalInput` or `DigitalOutput`, eg. `SSD` - seven segment display or `RGBLed`. See `examples/register` for more.
517
904
 
@@ -523,7 +910,7 @@ See new examples in the [examples](examples) folder to learn more.
523
910
  - Callback functionality for components has been extracted into a mixin module, `Mixins::Callbacks`.
524
911
  - Like before, callbacks for all components on a board run sequentially, in a single "update" thread, separate from the main thread. This is the same thread reading from TxRx.
525
912
  - `#add_callback` and `#remove_callback` methods are available, and take an optional `key` as argument.
526
- - Blocks given to `#add_callback` are stored in `@callbacks[key]`, to be called later, when the "update" thread receives data for the component. The default key is `:persistent`.
913
+ - Blocks given to `#add_callback` are stored in `@callbacks[key]`, to be called later, when the "update" thread receives data for the component. The default key is `:persistent`.
527
914
  - Each key represents an array of callbacks, so multiple callbacks can share the same key.
528
915
  - Calling `#remove_callbacks` with a key empties that array. Calling with no key removes **all** callbacks for the component.
529
916
  - `#pre_callback_filter` is defined in the `Callbacks` module. The return value of this method is what is given to the component's callbacks and to update its `@state`. By default, it returns whatever was given from the board.
@@ -563,7 +950,7 @@ See new examples in the [examples](examples) folder to learn more.
563
950
  * Flashing the updated sketch to the board is required.
564
951
 
565
952
  ## 0.11.1
566
-
953
+
567
954
  ### New Features
568
955
 
569
956
  * Support for the Arduino Ethernet shield and compatibles (Wiznet W5100 chipset).
data/DEPS_CLI.md CHANGED
@@ -16,17 +16,16 @@ arduino-cli core install arduino:sam
16
16
  arduino-cli core install arduino:samd
17
17
  arduino-cli core install arduino:renesas_uno
18
18
  arduino-cli core install esp8266:esp8266
19
- arduino-cli core install esp32:esp32@2.0.17
19
+ arduino-cli core install esp32:esp32@3.2.0
20
20
  arduino-cli core install rp2040:rp2040
21
21
  arduino-cli lib install Servo
22
22
  arduino-cli lib install Ethernet
23
23
  arduino-cli lib install WiFi
24
24
  arduino-cli lib install WiFi101
25
25
  arduino-cli lib install WiFiNINA
26
- arduino-cli lib install IRremote@4.1.2
27
- arduino-cli lib install IRremoteESP8266@2.8.4
28
- arduino-cli lib install ESP32Servo
29
- arduino-cli lib install "Adafruit NeoPixel"
26
+ arduino-cli lib install ESP32Servo@3.0.6
27
+ arduino-cli lib install IRremote@4.4.2
28
+ arduino-cli lib install "Adafruit NeoPixel"@1.15.1
30
29
  ````
31
30
 
32
31
  **AVR-based Arduinos & Clones Only:**
@@ -37,8 +36,8 @@ arduino-cli lib install Servo
37
36
  arduino-cli lib install Ethernet
38
37
  arduino-cli lib install WiFi
39
38
  arduino-cli lib install WiFiNINA
40
- arduino-cli lib install IRremote@4.1.2
41
- arduino-cli lib install "Adafruit NeoPixel"
39
+ arduino-cli lib install IRremote@4.4.2
40
+ arduino-cli lib install "Adafruit NeoPixel"@1.15.1
42
41
  ````
43
42
 
44
43
  **ARM-based Arduinos & Clones Only:**
@@ -52,8 +51,8 @@ arduino-cli lib install Ethernet
52
51
  arduino-cli lib install WiFi
53
52
  arduino-cli lib install WiFi101
54
53
  arduino-cli lib install WiFiNINA
55
- arduino-cli lib install IRremote@4.1.2
56
- arduino-cli lib install "Adafruit NeoPixel"
54
+ arduino-cli lib install IRremote@4.4.2
55
+ arduino-cli lib install "Adafruit NeoPixel"@1.15.1
57
56
  ````
58
57
 
59
58
  **ESP8266 Only:**
@@ -62,8 +61,8 @@ arduino-cli config init
62
61
  arduino-cli config add board_manager.additional_urls https://arduino.esp8266.com/stable/package_esp8266com_index.json
63
62
  arduino-cli core update-index
64
63
  arduino-cli core install esp8266:esp8266
65
- arduino-cli lib install IRremoteESP8266@2.8.5
66
- arduino-cli lib install "Adafruit NeoPixel"
64
+ arduino-cli lib install IRremote@4.4.2
65
+ arduino-cli lib install "Adafruit NeoPixel"@1.15.1
67
66
  ````
68
67
 
69
68
  **ESP32 Only:**
@@ -71,10 +70,10 @@ arduino-cli lib install "Adafruit NeoPixel"
71
70
  arduino-cli config init
72
71
  arduino-cli config add board_manager.additional_urls https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json
73
72
  arduino-cli core update-index
74
- arduino-cli core install esp32:esp32@2.0.17
75
- arduino-cli lib install ESP32Servo
76
- arduino-cli lib install IRremoteESP8266@2.8.5
77
- arduino-cli lib install "Adafruit NeoPixel"
73
+ arduino-cli core install esp32:esp32@3.2.0
74
+ arduino-cli lib install ESP32Servo@3.0.6
75
+ arduino-cli lib install IRremote@4.4.2
76
+ arduino-cli lib install "Adafruit NeoPixel"@1.15.1
78
77
  ````
79
78
 
80
79
  **RP2040 Only:**
@@ -83,5 +82,6 @@ arduino-cli config init
83
82
  arduino-cli config add board_manager.additional_urls https://github.com/earlephilhower/arduino-pico/releases/download/global/package_rp2040_index.json
84
83
  arduino-cli core update-index
85
84
  arduino-cli core install rp2040:rp2040
86
- arduino-cli lib install IRremote@4.1.2
85
+ arduino-cli lib install IRremote@4.4.2
86
+ arduino-cli lib install "Adafruit NeoPixel"@1.15.1
87
87
  ````