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
@@ -1,34 +0,0 @@
1
- #
2
- # Example looping the Arduino Zero's DAC back into one of its ADC pins.
3
- #
4
- require 'bundler/setup'
5
- require 'denko'
6
-
7
- #
8
- # Arduino Zero: :DAC0 is :A0 is GPIO14
9
- # Arduino UNO R4: :DAC is :A0 is GPIO14
10
- # ESP32 V1: :DAC0 is GPIO25, :DAC1 is GPIO26, :A4 is GPIO32
11
- # ESP32-S2: :DAC0 is GPIO17, :DAC1 is GPIO18, :A4 is GPIO5
12
- #
13
- # Connect DAC_PIN TO ADC_PIN with a jumper to test.
14
- #
15
- DAC_PIN = :DAC0
16
- ADC_PIN = :A4
17
-
18
- board = Denko::Board.new(Denko::Connection::Serial.new)
19
- dac = Denko::AnalogIO::Output.new(pin: DAC_PIN, board: board)
20
- adc = Denko::AnalogIO::Input.new(pin: ADC_PIN, board: board)
21
-
22
- #
23
- # Read values should be approximately 4x the written values, since Board#new tries to
24
- # set output resolution at 8-bits and input to 10-bits. Not configurable on all chips.
25
- # Scale may be off but, readings should still be proportional.
26
- #
27
- [0, 32, 64, 128, 192, 255].each do |output_value|
28
- dac.write output_value
29
- sleep 1
30
- loopback_value = adc.read
31
- puts "ADC reads: #{loopback_value} when DAC writes: #{output_value}"
32
- end
33
-
34
- board.finish_write
@@ -1,55 +0,0 @@
1
- #
2
- # This example shows how to use your board's analog-to-digital-converter(ADC) pins,
3
- # through the AnalogIO::Input class. ADC inputs can be connected to sensors
4
- # which produce a variable output voltage, such as light dependent resistors,
5
- # or a simple temperature sensor like the TMP36.
6
- #
7
- require 'bundler/setup'
8
- require 'denko'
9
-
10
- board = Denko::Board.new(Denko::Connection::Serial.new)
11
- input = Denko::AnalogIO::Input.new(pin: :A0, board: board)
12
-
13
- # Single read that blocks the main thread. When a value is received, the given
14
- # code block runs only once, and then the main thread continues.
15
- input.read { |value| puts "#{Time.now} Single read #1: #{value}" }
16
-
17
- # Read (poll) the input every half second. This happens in a separate thread,
18
- # so sleep the main thread for a while to get some values.
19
- # Given code block is added as a callback, and runs every time a value is received.
20
- input.poll(0.5) { |value| puts "#{Time.now} Polling: #{value}" }
21
- sleep 3
22
-
23
- # Stop polling. Automatically removes the #poll callback.
24
- input.stop
25
-
26
- # Listening is similar to polling. The board reads the input and sends the value
27
- # every time interval, except it's keeping time. We only send the initial command,
28
- # not one for each read. Smaller intervals like 32 milliseconds are possible.
29
- # Powers of 2 from 1 to 128 are supported for listener intervals.
30
- input.listen(32) { |value| puts "#{Time.now} Listening: #{value}" }
31
- sleep 0.5
32
-
33
- # Stop listening. Automatically removes the #listen callback.
34
- input.stop
35
-
36
- # This adds a persistent callback, which runs no matter how a read happens.
37
- # It will not be removed by #stop.
38
- input.on_data { |value| puts "#{Time.now} Persistent callback: #{value}" }
39
-
40
- # This is a persistent callback with a custom key.
41
- input.on_data(:test) { |value| puts "#{Time.now} Keyed callback: #{value}"}
42
-
43
- # If we do a single read, the two persistent callbacks, and the block given, should run once each.
44
- input.read { |value| puts "#{Time.now} Single read #2: #{value}" }
45
-
46
- # If we listen, the two persistent callbacks, and the block given should run many times.
47
- input.listen(8) { |value| puts "#{Time.now } Listening again: #{value}" }
48
- sleep 0.125
49
- input.stop
50
-
51
- # Remove callbacks keyed with :test.
52
- input.remove_callbacks(:test)
53
-
54
- # Remove all callbacks.
55
- input.remove_callbacks
@@ -1,34 +0,0 @@
1
- require 'bundler/setup'
2
- require 'denko'
3
- #
4
- # This example shows how to use denko when connecting to a board via TCP.
5
- # This applies to the WiFi and Ethernet sketches, or serial sketch + ser2net.
6
- # Port number defaults to 3466 (denko), but may be given as a second argument.
7
- # It must correspond to the listening port set when the board was flashed.
8
- #
9
- connection = Denko::Connection::TCP.new("192.168.0.77", 3466)
10
- # connection = Denko::Connection::TCP.new("127.0.0.1")
11
- # connection = Denko::Connection::TCP.new("192.168.1.2", 3466)
12
- #
13
- board = Denko::Board.new(connection)
14
- led = Denko::LED.new(board: board, pin: :LED_BUILTIN)
15
-
16
- [:on, :off].cycle do |switch|
17
- led.send(switch)
18
- sleep 0.5
19
- end
20
- #
21
- # ser2net can be used to simulate a TCP interface from a board running denko serial.
22
- # It serves the serial interface over a TCP port from the machine running ser2net.
23
- #
24
- # Example ser2net command for an Arduino UNO connected to a Mac:
25
- # ser2net -u -C "3466:raw:0:/dev/cu.usbmodem621:115200"
26
- #
27
- # Tell denko to connect to the IP address of the Mac, at port 3466.
28
- # Note: ser2net should be used in raw TCP mode, not telnet mode (more common).
29
- #
30
- # Replace /dev/cu.usbmodem621 with your denko serial device.
31
- # Arduino UNOs should be something like /dev/ttyACM0 under Linux.
32
- #
33
- # http://sourceforge.net/projects/ser2net/ for more info on installing and configuring ser2net.
34
- #
@@ -1,13 +0,0 @@
1
- #
2
- # Simple button example.
3
- #
4
- require 'bundler/setup'
5
- require 'denko'
6
-
7
- board = Denko::Board.new(Denko::Connection::Serial.new)
8
- button = Denko::DigitalIO::Button.new(board: board, pin: 5, pullup: true)
9
-
10
- button.up { puts "Button released!" }
11
- button.down { puts "Button pressed!" }
12
-
13
- sleep
@@ -1,26 +0,0 @@
1
- #
2
- # Example of a smiple rotary encoder polling at ~1ms.
3
- #
4
- # WARNING: This method is not precise at all. Please do not use it for anything
5
- # that requires all steps to be read for precise positioning or high speed.
6
- #
7
- require 'bundler/setup'
8
- require 'denko'
9
-
10
- board = Denko::Board.new(Denko::Connection::Serial.new)
11
- encoder = Denko::DigitalIO::RotaryEncoder.new board: board,
12
- pins: { clock: 4, data: 5 },
13
- divider: 1, # default, reads each pin every 1ms
14
- steps_per_revolution: 30 # default
15
-
16
- # Reverse direction if needed.
17
- # encoder.reverse
18
-
19
- # Reset angle and steps to 0.
20
- encoder.reset
21
-
22
- encoder.add_callback do |state|
23
- puts "Encoder moved #{state[:change]} steps | CW step count: #{state[:steps]} | Current angle: #{state[:angle]}\xC2\xB0"
24
- end
25
-
26
- sleep
Binary file
@@ -1,39 +0,0 @@
1
- #
2
- # This example writes "Hello World!" in the display
3
- #
4
- require 'bundler/setup'
5
- require 'denko'
6
-
7
- board = Denko::Board.new(Denko::Connection::Serial.new)
8
- lcd = Denko::Display::HD44780.new board: board,
9
- pins: { rs: 8, enable: 9, d4: 4, d5: 5, d6: 6, d7: 7 },
10
- cols: 16,
11
- rows: 2
12
-
13
- # Bitmap for a custom character. 5 bits wide x 8 high.
14
- # Useful for generating these: https://omerk.github.io/lcdchargen/
15
- heart = [ 0b00000,
16
- 0b00000,
17
- 0b01010,
18
- 0b11111,
19
- 0b11111,
20
- 0b01110,
21
- 0b00100,
22
- 0b00000 ]
23
-
24
- # Define the character in CGRAM address 2. 0-7 are usable.
25
- lcd.create_char(2, heart)
26
-
27
- # Need to call home/clear/set_cursor so we go back to writing DDRAM.
28
- lcd.home
29
-
30
- # End the first line with the heart by writing its CGRAM address.
31
- lcd.print "Hello World! "
32
- lcd.write(2)
33
-
34
- # Display a clock on second line, updating approximately every second.
35
- loop do
36
- lcd.move_to 0,1
37
- lcd.print(Time.now.strftime("%I:%M:%S"))
38
- sleep 1
39
- end
@@ -1,40 +0,0 @@
1
- #
2
- # Example using an SSD1306 driven OLED screen over I2C.
3
- #
4
- require 'bundler/setup'
5
- require 'denko'
6
-
7
- board = Denko::Board.new(Denko::Connection::Serial.new)
8
-
9
- #
10
- # Default pins for the I2C0 (first) interface on most chips:
11
- #
12
- # ATmega 328p: SDA = 'A4' SCL = 'A5' - Arduino Uno, Nano
13
- # ATmega 32u4: SDA = 2 SCL = 3 - Arduino Leonardo, Pro Micro
14
- # ATmega1280 / 2560: SDA = 20 SCL = 21 - Arduino Mega
15
- # SAM3X8E: SDA = 20 SCL = 21 - Arduino Due
16
- # SAMD21G18: SDA = 20 SCL = 21 - Arduino Zero, M0, M0 Pro
17
- # ESP8266: SDA = 4 SCL = 5
18
- # ESP32: SDA = 21 SCL = 22
19
- # RP2040: SDA = 4 SCL = 5 - Raspberry Pi Pico (W)
20
- #
21
- # Only give the SDA pin of the I2C bus. SCL (clock) pin must be
22
- # connected for it to work, but we don't need to control it.
23
- #
24
- bus = Denko::I2C::Bus.new(board: board, pin: :SDA)
25
- oled = Denko::Display::SSD1306.new(bus: bus, rotate: true)
26
- canvas = oled.canvas
27
-
28
- # Draw some text on the OLED's canvas (a Ruby memory buffer).
29
- canvas.text_cursor = [27,60]
30
- canvas.print("Hello World!")
31
-
32
- # Add some shapes to the canvas.
33
- baseline = 40
34
- canvas.rectangle(10, baseline, 30, -30)
35
- canvas.circle(66, baseline - 15, 15)
36
- canvas.triangle(87, baseline, 117, baseline, 102, baseline - 30)
37
-
38
- # Send the canvas to the OLED's graphics RAM so it shows.
39
- oled.draw
40
- board.finish_write
@@ -1,29 +0,0 @@
1
- #
2
- # Example using the SSD1306 OLED built into the LOLIN ES32-S2 PICO
3
- #
4
- require 'bundler/setup'
5
- require 'denko'
6
-
7
- board = Denko::Board.new(Denko::Connection::Serial.new)
8
-
9
- # The OLED's reset pin on this board isn't tied high. Do it manually.
10
- reset = Denko::DigitalIO::Output.new(board: board, pin: 18)
11
- reset.high
12
-
13
- bus = Denko::I2C::Bus.new(board: board, pin: :SDA)
14
- oled = Denko::Display::SSD1306.new(bus: bus, width: 128, height: 32)
15
- canvas = oled.canvas
16
-
17
- # Draw some text on the OLED's canvas (a Ruby memory buffer).
18
- canvas.text_cursor = [27,31]
19
- canvas.print("Hello World!")
20
-
21
- # Add some shapes to the canvas.
22
- baseline = 15
23
- canvas.rectangle(10, baseline, 15, -15)
24
- canvas.circle(66, baseline - 7, 8)
25
- canvas.triangle(102, baseline, 118, baseline, 110, baseline - 15)
26
-
27
- # Send the canvas to the OLED's graphics RAM so it shows.
28
- oled.draw
29
- board.finish_write
@@ -1,32 +0,0 @@
1
- #
2
- # Example showing how to load, modify and save the board's EEPROM.
3
- #
4
- require 'bundler/setup'
5
- require 'denko'
6
-
7
- board = Denko::Board.new(Denko::Connection::Serial.new)
8
-
9
- # Initialization automatically gets all EEPROM data from the board.
10
- # eeprom = Denko::EEPROM::BuiltIn(board: board)
11
- eeprom = board.eeprom
12
-
13
- # EEPROM size reported by the board.
14
- puts "EEPROM Size: #{eeprom.length} bytes"
15
-
16
- # Write values like an array.
17
- eeprom[0] = 128
18
- eeprom[1] = 127
19
-
20
- # Changes do not save to the board automatically.
21
- # Call #save to write to the board, and automatically reload from it.
22
- eeprom.save
23
-
24
- # Read values like an array.
25
- puts "Address 0 contains: #{eeprom[0]}"
26
-
27
- # Enumerate like an array.
28
- eeprom.each_with_index do |byte, address|
29
- if address == 1
30
- puts "Address #{address} contains #{byte}"
31
- end
32
- end
@@ -1,55 +0,0 @@
1
- #
2
- # Example that shows the default I2C bus pins, and addresses of any
3
- # devices connected to the bus.
4
- #
5
- require 'bundler/setup'
6
- require 'denko'
7
-
8
- # Method to let the user set I2C pins.
9
- def enter_pins
10
- puts "Please manually specify I2C pins..."
11
- print "I2C SDA pin: "; sda = gets
12
- print "I2C SCL pin: "; scl = gets
13
- puts
14
- [sda.to_i, scl.to_i]
15
- end
16
-
17
- board = Denko::Board.new(Denko::Connection::Serial.new)
18
-
19
- # If no board map, ask user to set pins manually.
20
- unless board.map
21
- puts "Error: Pin map not available for this board"
22
- sda, scl = enter_pins
23
-
24
- # Else get defaults from map.
25
- else
26
- puts "Detected board: #{board.name}"
27
-
28
- sda = board.map[:SDA] || board.map[:SDA0]
29
- scl = board.map[:SCL] || board.map[:SCL0]
30
-
31
- # If not in map, ask user to set manually.
32
- unless sda && scl
33
- puts "Error: I2C pins not found in this board's pin map"
34
- sda, scl = enter_pins
35
- end
36
- end
37
-
38
- puts "Using I2C interface on pins #{sda} (SDA) and #{scl} (SCL)"
39
- puts
40
-
41
- bus = Denko::I2C::Bus.new(board: board, pin: sda)
42
- bus.search
43
-
44
- if bus.found_devices.empty?
45
- puts "No devices found on I2C bus"
46
- else
47
- puts "I2C device addresses found:"
48
- bus.found_devices.each do |address|
49
- # Print as hexadecimal.
50
- puts "0x#{address.to_s(16).upcase}"
51
- end
52
- end
53
-
54
- puts
55
- board.finish_write
@@ -1,33 +0,0 @@
1
- #
2
- # Walk a single pixel along the length of an APA102 strip and back,
3
- # changing color each time it returns to position 0.
4
- #
5
- require 'bundler/setup'
6
- require 'denko'
7
-
8
- RED = [255, 0, 0]
9
- GREEN = [0, 255, 0]
10
- BLUE = [0, 0, 255]
11
- WHITE = [255, 255, 255]
12
- COLORS = [RED, GREEN, BLUE, WHITE]
13
- PIXELS = 8
14
-
15
- # Move along the strip and back, one pixel at a time.
16
- positions = (0..PIXELS-1).to_a + (1..PIXELS-2).to_a.reverse
17
-
18
- board = Denko::Board.new(Denko::Connection::Serial.new)
19
-
20
- # Use the default hardware SPI bus.
21
- bus = Denko::SPI::Bus.new(board: board)
22
- strip = Denko::LED::APA102.new(bus: bus, length: PIXELS)
23
-
24
- loop do
25
- COLORS.each do |color|
26
- positions.each do |index|
27
- strip.clear
28
- strip[index] = color
29
- strip.show
30
- sleep 0.05
31
- end
32
- end
33
- end
@@ -1,45 +0,0 @@
1
- #
2
- # Walk a single pixel along the length of an APA102 strip and back,
3
- # changing color each time it returns to position 0.
4
- #
5
- require 'bundler/setup'
6
- require 'denko'
7
-
8
- RED = [255, 0, 0]
9
- GREEN = [0, 255, 0]
10
- BLUE = [0, 0, 255]
11
- WHITE = [255, 255, 255]
12
- COLORS = [RED, GREEN, BLUE, WHITE]
13
- PIXELS = 3
14
-
15
- # Get all the brightness values as an array.
16
- brightness_steps = (0..31).to_a
17
-
18
- board = Denko::Board.new(Denko::Connection::Serial.new)
19
-
20
- # Use the default hardware SPI bus.
21
- bus = Denko::SPI::Bus.new(board: board)
22
- strip = Denko::LED::APA102.new(bus: bus, length: PIXELS)
23
-
24
- # Test global brightness control first.
25
- strip[0] = RED
26
- strip[1] = GREEN
27
- strip[2] = BLUE
28
-
29
- # Fade up from 0 brightness then back down.
30
- (brightness_steps + brightness_steps.reverse).each do |value|
31
- strip.brightness = value
32
- strip.show
33
- sleep 0.05
34
- end
35
-
36
- # Test per-pixel brightness by fading different pixels different directions.
37
- loop do
38
- (brightness_steps + brightness_steps.reverse).each do |value|
39
- strip[0] = RED + [value]
40
- strip[1] = GREEN + [31 - value]
41
- strip[2] = BLUE + [value]
42
- strip.show
43
- sleep 0.1
44
- end
45
- end
@@ -1,12 +0,0 @@
1
- #
2
- # Blink example for standard built-in LEDs named :LED_BUILTIN
3
- #
4
- require 'bundler/setup'
5
- require 'denko'
6
-
7
- board = Denko::Board.new(Denko::Connection::Serial.new)
8
- led = Denko::LED.new(board: board, pin: :LED_BUILTIN)
9
-
10
- led.blink 0.5
11
-
12
- sleep
@@ -1,15 +0,0 @@
1
- #
2
- # This is an example of how to use the ssd class
3
- #
4
- require 'bundler/setup'
5
- require 'denko'
6
-
7
- board = Denko::Board.new(Denko::Connection::Serial.new)
8
- ssd = Denko::LED::SevenSegment.new board: board,
9
- pins: { cathode: 10, a: 3, b: 4, c: 5, d: 6, e: 7, f: 8, g: 9 }
10
-
11
- # Turn off the ssd on exit
12
- trap("SIGINT") { exit !ssd.off }
13
-
14
- # Display each new line on the ssd
15
- loop { ssd.display(gets.chomp) }
@@ -1,32 +0,0 @@
1
- #
2
- # Walk a single pixel along the length of a WS2812 strip and back,
3
- # changing color each time it returns to position 0.
4
- #
5
- require 'bundler/setup'
6
- require 'denko'
7
-
8
- RED = [255, 0, 0]
9
- GREEN = [0, 255, 0]
10
- BLUE = [0, 0, 255]
11
- WHITE = [255, 255, 255]
12
- COLORS = [RED, GREEN, BLUE, WHITE]
13
-
14
- WS2812_PIN = 4
15
- PIXELS = 8
16
-
17
- # Move along the strip and back, one pixel at a time.
18
- positions = (0..PIXELS-1).to_a + (1..PIXELS-2).to_a.reverse
19
-
20
- board = Denko::Board.new(Denko::Connection::Serial.new)
21
- strip = Denko::LED::WS2812.new(board: board, pin: WS2812_PIN, length: PIXELS)
22
-
23
- loop do
24
- COLORS.each do |color|
25
- positions.each do |index|
26
- strip.clear
27
- strip[index] = color
28
- strip.show
29
- sleep 0.05
30
- end
31
- end
32
- end
@@ -1,21 +0,0 @@
1
- #
2
- # Blink example for the LOLIN ESP32 S3 or C3, or any board where
3
- # :LED_BUILTIN is the data pin for a single on-board WS2812.
4
- #
5
- require 'bundler/setup'
6
- require 'denko'
7
-
8
- WHITE = [255, 255, 255]
9
- OFF = [0, 0, 0]
10
-
11
- board = Denko::Board.new(Denko::Connection::Serial.new)
12
- strip = Denko::LED::WS2812.new(board: board, pin: :LED_BUILTIN, length: 1)
13
-
14
- loop do
15
- strip[0] = WHITE
16
- strip.show
17
- sleep 0.5
18
- strip[0] = OFF
19
- strip.show
20
- sleep 0.5
21
- end
@@ -1,43 +0,0 @@
1
- #
2
- # Example driving a DC motor with a L298 H-Bridge driver.
3
- #
4
- require 'bundler/setup'
5
- require 'denko'
6
- board = Denko::Board.new(Denko::Connection::Serial.new)
7
-
8
- # This is only 1 channel of the driver. Make a new object for each channel.
9
- motor = Denko::Motor::L298.new board: board, pins: {direction1: 8, direction2: 9, enable: 10}
10
-
11
- # Off without braking (initial state).
12
- # motor.off
13
- # motor.idle
14
-
15
- # Go forward at half speed for a while.
16
- motor.forward board.pwm_high / 2
17
- sleep 2
18
-
19
- # Change direction.
20
- motor.reverse board.pwm_high / 2
21
- sleep 2
22
-
23
- # Speed up without changing direction.
24
- motor.speed = board.pwm_high
25
- sleep 2
26
-
27
- # Brake to stop quickly.
28
- motor.brake
29
- sleep 1
30
-
31
- # Change from brake to forward, but 0 speed.
32
- motor.forward 0
33
- sleep 1
34
-
35
- # Gradually speed up.
36
- (1..20).each do |step|
37
- sleep 0.5
38
- motor.speed = (board.pwm_high * (step / 20.0)).round
39
- end
40
-
41
- # Turn it off.
42
- motor.off
43
- board.finish_write
@@ -1,16 +0,0 @@
1
- #
2
- # This is an example of how to use the servo class
3
- #
4
- require 'bundler/setup'
5
- require 'denko'
6
-
7
- board = Denko::Board.new(Denko::Connection::Serial.new)
8
- servo = Denko::Motor::Servo.new(pin: 9, board: board)
9
-
10
- # Add different angles (in degrees) to the array below to try out your servo.
11
- # Note: Some servos may not have a full 180 degree sweep.
12
-
13
- [0, 90].cycle do |angle|
14
- servo.position = angle
15
- sleep 0.5
16
- end
Binary file
@@ -1,43 +0,0 @@
1
- #
2
- # Example driving a stepper motor with the EasyDriver board: https://www.sparkfun.com/products/10267?
3
- #
4
- require 'bundler/setup'
5
- require 'denko'
6
-
7
- board = Denko::Board.new(Denko::Connection::Serial.new)
8
- stepper = Denko::Motor::Stepper.new board: board,
9
- pins: { slp: 6, enable: 7, direction: 8, step: 10, ms1: 11, ms2: 12 }
10
-
11
- # Default is 8 microsteps. Set to 2 so we can move faster.
12
- stepper.microsteps = 2
13
-
14
- # 400 steps is now 1 revolution for a 200 step motor.
15
- 400.times do
16
- stepper.step_cc
17
- sleep 0.002
18
- end
19
-
20
- # Sleep the driver chip and wait a while.
21
- stepper.sleep
22
- sleep 1
23
-
24
- # Wake it up and set to full steps.
25
- stepper.wake
26
- stepper.microsteps = 1
27
-
28
- #
29
- # Now 200 steps the other way will move us back to the start.
30
- # Note the longer sleep here since the steps are bigger.
31
- # Adjust both sleep vales to suit your motor.
32
- #
33
- 200.times do
34
- stepper.step_cw
35
- sleep 0.006
36
- end
37
-
38
- # Sleep the driver once we're done.
39
- stepper.sleep
40
-
41
- # We write to the board asynchronously.
42
- # Make sure we send all step commands before exit.
43
- board.finish_write
@@ -1,30 +0,0 @@
1
- #
2
- # Example of playing a melody on a piezoelectric buzzer.
3
- #
4
- require 'bundler/setup'
5
- require 'denko'
6
-
7
- board = Denko::Board.new(Denko::Connection::Serial.new)
8
- buzzer = Denko::PulseIO::Buzzer.new(board: board, pin: 9)
9
-
10
- C4 = 262
11
- D4 = 294
12
- E4 = 330
13
-
14
- notes = [
15
- [E4, 1], [D4, 1], [C4, 1], [D4, 1], [E4, 1], [E4, 1], [E4, 2],
16
- [D4, 1], [D4, 1], [D4, 2], [E4, 1], [E4, 1], [E4, 2],
17
- [E4, 1], [D4, 1], [C4, 1], [D4, 1], [E4, 1], [E4, 1], [E4, 1], [E4, 1],
18
- [D4, 1], [D4, 1], [E4, 1], [D4, 1], [C4, 4],
19
- ]
20
-
21
- bpm = 240
22
- beat_time = 60.to_f / bpm
23
-
24
- notes.each do |note|
25
- buzzer.tone(note[0])
26
- sleep note[1] * beat_time
27
- end
28
-
29
- buzzer.stop
30
- board.finish_write