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,55 +0,0 @@
1
- #
2
- # This is a simple test of the IREmitter (infrared blaster) class.
3
- # It is based on this example from the Arduino library:
4
- # https://github.com/Arduino-IRremote/Arduino-IRremote/tree/master/examples/SendDemo
5
- #
6
- # To verify your emitter is working, you can flash this sketch on a second board:
7
- # https://github.com/Arduino-IRremote/Arduino-IRremote/tree/master/examples/ReceiveDemo
8
- #
9
- # Attach an IR receiver to the receive pin (2 for Atmel AVR) and observe for serial output.
10
- #
11
- # If you don't have 2 boards, use the receive sketch to capture a code from a button
12
- # of a remote you have. Copy the raw code (long list of numbers in curly braces),
13
- # and modify it into a Ruby array.
14
- #
15
- # Reflash the denko sketch onto your board and test the IR code operates your device.
16
- #
17
- # Both of these methods require you to have an IR receiver handy.
18
- # If you do not have one, there are IR codes in Raw format for many devices
19
- # available on sites like http://irdb.tk/codes/
20
- # When formatted as a string of numbers with + and - in front of each number,
21
- # you will need to convert them to the array format before use.
22
- #
23
- require 'bundler/setup'
24
- require 'denko'
25
-
26
- # Note: If testing with 2 boards connected to the same computer, you want to be
27
- # explicit about which serial device this script must use. The relevant
28
- # Connection call is below, but commented out. Enable it and substitute the approriate
29
- # device for the board that has the IR emitter connected and denko sketch loaded.
30
- # Open the receiver board in the Arduino IDE's or another serial monitor.
31
- #
32
- connection = Denko::Connection::Serial.new
33
- # connection = Denko::Connection::Serial.new(device: "/dev/ttyACM0")
34
- board = Denko::Board.new(connection)
35
-
36
- #
37
- # The IR emitter can be set up on most pins for most boards, but there might be conflicts
38
- # with other hardware or libraries. Try different pins if one doesn't work.
39
- #
40
- ir = Denko::PulseIO::IRTransmitter.new(board: board, pin: 3)
41
-
42
- # NEC Raw-Data=0xF708FB04. LSBFIRST, so the binary for each hex digit below is backward.
43
- code = [ 9000, 4500, # Start bit
44
- 560, 560, 560, 560, 560, 1690, 560, 560, # 0010 0x4 command
45
- 560, 560, 560, 560, 560, 560, 560, 560, # 0000 0x0 command
46
- 560, 1690, 560, 1690, 560,560, 560, 1690, # 1101 0xB command inverted
47
- 560, 1690, 560, 1690, 560, 1690, 560, 1690, # 1111 0xF command inverted
48
- 560, 560, 560, 560, 560, 560, 560, 1690, # 0001 0x8 address
49
- 560, 560, 560, 560, 560, 560, 560, 560, # 0000 0x0 address
50
- 560, 1690, 560, 1690, 560, 1690, 560, 560, # 1110 0x7 address inverted
51
- 560, 1690, 560, 1690, 560, 1690, 560, 1690, # 1111 0xF address inverted
52
- 560] # Stop bit
53
-
54
- ir.emit(code)
55
- board.finish_write
@@ -1,48 +0,0 @@
1
- #
2
- # Example using a D3231 real-time-clock over I2C. Sets the time and reads it
3
- # back every 5 seconds.
4
- #
5
- require 'bundler/setup'
6
- require 'denko'
7
-
8
- board = Denko::Board.new(Denko::Connection::Serial.new)
9
-
10
- #
11
- # Default pins for the I2C0 (first) interface on most chips:
12
- #
13
- # ATmega 328p: SDA = 'A4' SCL = 'A5' - Arduino Uno, Nano
14
- # ATmega 32u4: SDA = 2 SCL = 3 - Arduino Leonardo, Pro Micro
15
- # ATmega1280 / 2560: SDA = 20 SCL = 21 - Arduino Mega
16
- # SAM3X8E: SDA = 20 SCL = 21 - Arduino Due
17
- # SAMD21G18: SDA = 20 SCL = 21 - Arduino Zero, M0, M0 Pro
18
- # ESP8266: SDA = 4 SCL = 5
19
- # ESP32: SDA = 21 SCL = 22
20
- # RP2040: SDA = 4 SCL = 5 - Raspberry Pi Pico (W)
21
- #
22
- # Only give the SDA pin of the I2C bus. SCL (clock) pin must be
23
- # connected for it to work, but we don't need to control it.
24
- #
25
- bus = Denko::I2C::Bus.new(board: board, pin: 'A4')
26
-
27
- # Tell the bus to search for devices.
28
- bus.search
29
-
30
- # Show the found devices.
31
- puts "No I2C devices connected!" if bus.found_devices.empty?
32
- bus.found_devices.each do |address|
33
- puts "I2C device connected with address: 0x#{address.to_s(16)}"
34
- end
35
-
36
- # 0x68 or 140 is the I2C address for most real time clocks.
37
- unless (bus.found_devices.include? 0x68)
38
- puts "No real time clock found!" unless bus.found_devices.empty?
39
- else
40
- puts; puts "Using real time clock at address 0x68"; puts
41
- rtc = Denko::RTC::DS3231.new(bus: bus, address: 0x68)
42
- rtc.time = Time.now
43
-
44
- 5.times do
45
- puts rtc.time
46
- sleep 5
47
- end
48
- end
@@ -1,19 +0,0 @@
1
- #
2
- # Example using AHT21 sensor over I2C, for temperature and humidity.
3
- #
4
- require 'bundler/setup'
5
- require 'denko'
6
-
7
- board = Denko::Board.new(Denko::Connection::Serial.new)
8
- bus = Denko::I2C::Bus.new(board: board, pin: :SDA)
9
- sensor = Denko::Sensor::AHT10.new(bus: bus) # address: 0x38 default
10
-
11
- # Get the shared #print_tph_reading method to print readings neatly.
12
- require_relative 'neat_tph_readings'
13
-
14
- # Poll it and print readings.
15
- sensor.poll(5) do |reading|
16
- print_tph_reading(reading)
17
- end
18
-
19
- sleep
@@ -1,19 +0,0 @@
1
- #
2
- # Example using AHT21 sensor over I2C, for temperature and humidity.
3
- #
4
- require 'bundler/setup'
5
- require 'denko'
6
-
7
- board = Denko::Board.new(Denko::Connection::Serial.new)
8
- bus = Denko::I2C::Bus.new(board: board, pin: :SDA)
9
- sensor = Denko::Sensor::AHT20.new(bus: bus) # address: 0x38 default
10
-
11
- # Get the shared #print_tph_reading method to print readings neatly.
12
- require_relative 'neat_tph_readings'
13
-
14
- # Poll it and print readings.
15
- sensor.poll(5) do |reading|
16
- print_tph_reading(reading)
17
- end
18
-
19
- sleep
@@ -1,38 +0,0 @@
1
- #
2
- # Example using a BME280 sensor over I2C, for temperature, pressure and humidity.
3
- #
4
- require 'bundler/setup'
5
- require 'denko'
6
-
7
- board = Denko::Board.new(Denko::Connection::Serial.new)
8
- bus = Denko::I2C::Bus.new(board: board, pin: :SDA)
9
-
10
- sensor = Denko::Sensor::BME280.new(bus: bus) # address: 0x76 default
11
- # Use A BMP280 with no humidity instead.
12
- # sensor = Denko::Sensor::BMP280.new(bus: bus) # address: 0x76
13
-
14
- # Default reading mode is oneshot ("forced" in datasheet).
15
- # sensor.oneshot_mode
16
-
17
- # Enable oversampling independently on each sensor.
18
- # sensor.temperature_samples = 8
19
- # sensor.pressure_samples = 2
20
- # sensor.humidity_samples = 4
21
-
22
- # Enable continuous reading mode ("normal" in datasheet), with standby time and IIR filter.
23
- # sensor.continuous_mode
24
- # sensor.standby_time = 62.5
25
- # sensor.iir_coefficient = 4
26
-
27
- # Print raw config register bits.
28
- # print sensor.config_register_bits
29
-
30
- # Get the shared #print_tph_reading method to print readings neatly.
31
- require_relative 'neat_tph_readings'
32
-
33
- # Poll it and print readings.
34
- sensor.poll(5) do |reading|
35
- print_tph_reading(reading)
36
- end
37
-
38
- sleep
@@ -1,22 +0,0 @@
1
- #
2
- # Example using a BMP180 sensor over I2C, for temperature and pressure.
3
- #
4
- require 'bundler/setup'
5
- require 'denko'
6
-
7
- board = Denko::Board.new(Denko::Connection::Serial.new)
8
- bus = Denko::I2C::Bus.new(board: board, pin: :SDA)
9
- sensor = Denko::Sensor::BMP180.new(bus: bus) # address: 0x77 default
10
-
11
- # Enable oversampling for the pressure sensor only (1,2,4, 8).
12
- # sensor.pressure_samples = 8
13
-
14
- # Get the shared #print_tph_reading method to print readings neatly.
15
- require_relative 'neat_tph_readings'
16
-
17
- # Poll it and print readings.
18
- sensor.poll(5) do |reading|
19
- print_tph_reading(reading)
20
- end
21
-
22
- sleep
@@ -1,24 +0,0 @@
1
- #
2
- # Example of how to use the DHT class for DHT 11 and DHT 22 sensors.
3
- #
4
- require 'bundler/setup'
5
- require 'denko'
6
-
7
- board = Denko::Board.new(Denko::Connection::Serial.new)
8
- dht = Denko::Sensor::DHT.new(pin: 5, board: board)
9
-
10
- # The DHT class pre-processes raw data from the board. When it reaches callbacks
11
- # it's already hash of :temperature and :humidity keys, both with Float values.
12
- dht.add_callback do |reading|
13
- print "#{Time.now.strftime '%Y-%m-%d %H:%M:%S'} | "
14
- if reading[:error]
15
- puts "Error: #{reading[:error]}"
16
- else
17
- print "#{reading[:celsius]} \xC2\xB0C | #{reading[:fahrenheit]} \xC2\xB0F | "
18
- puts "#{reading[:humidity]}% relative humidity"
19
- end
20
- end
21
-
22
- # Read it every 5 seconds.
23
- dht.poll(5)
24
- sleep
@@ -1,58 +0,0 @@
1
- #
2
- # Example of how to use the Dallas DS18B20 temperature sensor.
3
- #
4
- require 'bundler/setup'
5
- require 'denko'
6
-
7
- board = Denko::Board.new(Denko::Connection::Serial.new)
8
- bus = Denko::OneWire::Bus.new(pin:4, board: board)
9
-
10
- # The bus detects parasite power automatically when initialized.
11
- # It can tell that parasite power is in use, but not by WHICH devices.
12
- if bus.parasite_power
13
- puts "Parasite power detected..."; puts
14
- end
15
-
16
- # Call #device_present to reset the bus and return presence pulse as a boolean.
17
- if bus.device_present?
18
- puts "Devices present on bus..."; puts
19
- else
20
- puts "No devices present on bus... Quitting..."
21
- return
22
- end
23
-
24
- # Calling #search finds connected devices and stores them in #found_devices.
25
- # Each hash contains a device's ROM address and matching Ruby class if one exists.
26
- bus.search
27
- count = bus.found_devices.count
28
- puts "Found #{count} device#{'s' if count > 1} on the bus:"
29
- puts bus.found_devices.inspect; puts
30
-
31
- # We can use the search results to setup instances of the device classes.
32
- ds18b20s = []
33
- bus.found_devices.each do |d|
34
- if d[:class] == Denko::Sensor::DS18B20
35
- ds18b20s << d[:class].new(bus: bus, address: d[:address])
36
- end
37
- end
38
-
39
- # Format a reading for printing on a line.
40
- def print_reading(reading, sensor)
41
- print "#{Time.now.strftime '%Y-%m-%d %H:%M:%S'} - "
42
- print "Serial(HEX): #{sensor.serial_number} | Res: #{sensor.resolution} bits | "
43
-
44
- if reading[:crc_error]
45
- puts "CRC check failed for this reading!"
46
- else
47
- print "#{reading[:celsius]} \xC2\xB0C | #{reading[:fahrenheit]} \xC2\xB0F | "
48
- puts "Raw: #{reading[:raw].inspect}"
49
- end
50
- end
51
-
52
- ds18b20s.each do |sensor|
53
- sensor.poll(5) do |reading|
54
- print_reading(reading, sensor)
55
- end
56
- end
57
-
58
- sleep
@@ -1,25 +0,0 @@
1
- #
2
- # Example using a PIR motion sensor. Tested with AS312 and HC-SR501 sensors.
3
- #
4
- # General notes:
5
- # - Both sensors have a few seconds "dead time" after "motion stop" (logical 0), where further
6
- # motion will not trigger "motion start" (logical 1).
7
- #
8
- # HC-SR501 notes:
9
- # - Needs some time to warm up and start working properly.
10
- # - Set the time potentiometer to its lowest value.
11
- # - Make sure retriggering is enabled. It might be default, but there's a jumper to solder too.
12
- #
13
- require 'bundler/setup'
14
- require 'denko'
15
-
16
- board = Denko::Board.new(Denko::Connection::Serial.new)
17
- sensor = Denko::Sensor::GenericPIR.new(board: board, pin: 8)
18
-
19
- sensor.on_motion_start { print "Motion detected! \r" }
20
- sensor.on_motion_stop { print "No motion detected... \r" }
21
-
22
- # Read initial state.
23
- sensor.read
24
-
25
- sleep
@@ -1,14 +0,0 @@
1
- #
2
- # Example of reading an HC-SR04 ultrasonic sensor.
3
- #
4
- require 'bundler/setup'
5
- require 'denko'
6
-
7
- board = Denko::Board.new(Denko::Connection::Serial.new)
8
- hcsr04 = Denko::Sensor::HCSR04.new(board: board, pins: {trigger: 6, echo: 7})
9
-
10
- hcsr04.poll(0.05) do |distance|
11
- puts "Distance: #{distance} mm"
12
- end
13
-
14
- sleep
@@ -1,54 +0,0 @@
1
- #
2
- # Example using HTU21D sensor over I2C, for temperature and humidity.
3
- #
4
- require 'bundler/setup'
5
- require 'denko'
6
-
7
- board = Denko::Board.new(Denko::Connection::Serial.new)
8
- bus = Denko::I2C::Bus.new(board: board, pin: :SDA)
9
- htu21d = Denko::Sensor::HTU21D.new(bus: bus) # address: 0x40 default
10
-
11
- # Get and set heater state.
12
- htu21d.heater_on
13
- puts "Heater on: #{htu21d.heater_on?}"
14
- htu21d.heater_off
15
- puts "Heater off: #{htu21d.heater_off?}"
16
- puts
17
-
18
- # Back to default settings, except heater state.
19
- htu21d.reset
20
-
21
- # Only 4 resolution combinations are available, and need to be
22
- # set by giving a bitmask from the datasheet:
23
- # 0x00 = 14-bit temperature, 12-bit humidity
24
- # 0x01 = 12-bit temperature, 8-bit humidity (default)
25
- # 0x80 = 13-bit temperature, 10-bit humidity
26
- # 0x81 = 11-bit temperature, 11-bit humidity
27
- #
28
- htu21d.resolution = 0x81
29
- puts "Temperature resolution: #{htu21d.resolution[:temperature]} bits"
30
- puts "Humidity resolution: #{htu21d.resolution[:humidity]} bits"
31
- puts
32
-
33
- # Take direct readings by calling methods on the HTU21D instance.
34
- # Note: These methods do not take block callbacks like other components.
35
- # The HTU21D class doesn't directly implement polling methods either.
36
- #
37
- puts "Direct Temperature: #{htu21d.read_temperature.round(3)} \xC2\xB0C"
38
- puts "Direct Humidity: #{htu21d.read_humidity.round(3)} %"
39
- puts
40
-
41
- # The last read state can be accessed through sub-objects or [].
42
- puts "Last Temperature: #{htu21d.temperature.fahrenheit.round(3)} \xC2\xB0F"
43
- puts "Last Humidity: #{htu21d[:humidity].round(3)} %"
44
- puts
45
-
46
- # Poll temperature and humidity at different rates by calling methods on the sub-objects.
47
- htu21d.temperature.poll(2) do |value|
48
- puts "Sub-Object Temperature: #{value.round(3)} \xC2\xB0C"
49
- end
50
- htu21d.humidity.poll(4) do |value|
51
- puts "Sub-Object Humidity: #{value.round(3)} %"
52
- end
53
-
54
- sleep
@@ -1,35 +0,0 @@
1
- #
2
- # Example using HTU31D sensor over I2C, for temperature and humidity.
3
- #
4
- require 'bundler/setup'
5
- require 'denko'
6
-
7
- board = Denko::Board.new(Denko::Connection::Serial.new)
8
- bus = Denko::I2C::Bus.new(board: board, pin: :SDA)
9
- sensor = Denko::Sensor::HTU31D.new(bus: bus)
10
-
11
- # Get and set heater state.
12
- sensor.heater_on
13
- puts "Heater on: #{sensor.heater_on?}"
14
- sensor.heater_off
15
- puts "Heater off: #{sensor.heater_off?}"
16
-
17
- # Back to default settings, including heater off, unlike HTU21D.
18
- sensor.reset
19
- puts "Resetting HTU31D..."
20
- puts "Heater off: #{sensor.heater_off?}"
21
- puts
22
-
23
- # Resolution goes from 0..3 separately for temperature and humidity. See datasheet.
24
- sensor.temperature_resolution = 3
25
- sensor.humidity_resolution = 3
26
-
27
- # Get the shared #print_tph_reading method to print readings neatly.
28
- require_relative 'neat_tph_readings'
29
-
30
- # Unlike HTU21D, HTU31D works as a regular polled sensor.
31
- sensor.poll(5) do |reading|
32
- print_tph_reading(reading)
33
- end
34
-
35
- sleep
@@ -1,26 +0,0 @@
1
- #
2
- # This helper method can be used in temp/pressure/humidity sensor examples.
3
- # Give a hash with readings as float values and it prints them neatly.
4
- #
5
- def print_tph_reading(reading)
6
- # Time
7
- print "#{Time.now.strftime '%Y-%m-%d %H:%M:%S'} - "
8
-
9
- # Temperature
10
- formatted_temp = reading[:temperature].to_f.round(2).to_s.ljust(5, '0')
11
- print "Temperature: #{formatted_temp} \xC2\xB0C"
12
-
13
- # Pressure
14
- if reading[:pressure]
15
- formatted_pressure = (reading[:pressure] / 101325).round(5).to_s.ljust(7, '0')
16
- print " | Pressure #{formatted_pressure} atm"
17
- end
18
-
19
- # Humidity
20
- if reading[:humidity]
21
- formatted_humidity = reading[:humidity].round(2).to_s.ljust(5, '0')
22
- print " | Humidity #{formatted_humidity} %"
23
- end
24
-
25
- puts
26
- end
@@ -1,53 +0,0 @@
1
- #
2
- # Example using QMP6988 sensor over I2C, for air temperature and pressure.
3
- #
4
- require 'bundler/setup'
5
- require 'denko'
6
-
7
- board = Denko::Board.new(Denko::Connection::Serial.new)
8
- bus = Denko::I2C::Bus.new(board: board, pin: :SDA)
9
- sensor = Denko::Sensor::QMP6988.new(bus: bus) # address: 0x70 default
10
-
11
- # Verify chip_id.
12
- print "I2C device has chip ID: 0x#{sensor.chip_id.to_s(16).upcase}. "
13
- if sensor.chip_id == 0x5C
14
- puts "This matches the QMP6988."
15
- else
16
- puts "This does not match the QMP6988."
17
- end
18
- puts
19
-
20
- #
21
- # Change measurement settings:
22
- # temperature_samples can be 1,2,4,8,16,32 or 64 (default: 1)
23
- # pressure_samples can be 1,2,4,8,16,32 or 64 (default: 1)
24
- # iir_coefficient can be 0,2,4,8,16 or 32 (default: 0)
25
- #
26
- # High accuracy settings from datasheet, with IIR of 2.
27
- sensor.temperature_samples = 2
28
- sensor.pressure_samples = 16
29
- sensor.iir_coefficient = 2
30
-
31
- #
32
- # Change mode (default: forced_mode)
33
- #
34
- # Buggy on ESP32S3 in forced mode. Data registers return zeroes on all but first read.
35
- # Can't recreate on ESP32 V1, AVR or SAMD21. Put it in contiuous mode just in case.
36
- sensor.continuous_mode
37
- # sensor.forced_mode
38
-
39
- #
40
- # Set standby time (between measurements) for continuous mode only:
41
- # standby_time (given in ms) can be 1,5,20,250,500,1000,2000 or 4000 (default: 1)
42
- #
43
- # sensor.standby_time = 500
44
-
45
- # Get the shared #print_tph_reading method to print readings neatly.
46
- require_relative 'neat_tph_readings'
47
-
48
- # Poll it and print readings.
49
- sensor.poll(5) do |reading|
50
- print_tph_reading(reading)
51
- end
52
-
53
- sleep
@@ -1,15 +0,0 @@
1
- #
2
- # Example using an RCWL-9620 sensor over I2C to measure distance.
3
- #
4
- require 'bundler/setup'
5
- require 'denko'
6
-
7
- board = Denko::Board.new(Denko::Connection::Serial.new)
8
- bus = Denko::I2C::Bus.new(board: board, pin: :SDA)
9
- sensor = Denko::Sensor::RCWL9620.new(bus: bus) # address: 0x57 default
10
-
11
- sensor.poll(1) do |distance|
12
- puts "Distance is #{distance} mm"
13
- end
14
-
15
- sleep
@@ -1,34 +0,0 @@
1
- #
2
- # Example using SHT30/31/35 sensor over I2C, for temperature and humidity.
3
- #
4
- require 'bundler/setup'
5
- require 'denko'
6
-
7
- board = Denko::Board.new(Denko::Connection::Serial.new)
8
- bus = Denko::I2C::Bus.new(board: board, pin: :SDA)
9
- sensor = Denko::Sensor::SHT3X.new(bus: bus) # address: 0x44 default
10
-
11
- # Heater control
12
- sensor.heater_on
13
- puts "Heater on: #{sensor.heater_on?}"
14
- sensor.heater_off
15
- puts "Heater off: #{sensor.heater_off?}"
16
-
17
- # Reset (turns heater off)
18
- sensor.reset
19
- puts "Resetting..."
20
- puts "Heater off: #{sensor.heater_off?}"
21
- puts
22
-
23
- # Set repeatability= :low, :medium or :high (default). See datasheet for details.
24
- sensor.repeatability = :high
25
-
26
- # Get the shared #print_tph_reading method to print readings neatly.
27
- require_relative 'neat_tph_readings'
28
-
29
- # Poll it and print readings.
30
- sensor.poll(5) do |reading|
31
- print_tph_reading(reading)
32
- end
33
-
34
- sleep
@@ -1,50 +0,0 @@
1
- #
2
- # Example of a Button connected through an input shift register (CD4021B).
3
- # Can be used over either a bit bang or hardware SPI interface.
4
- #
5
- require 'bundler/setup'
6
- require 'denko'
7
-
8
- # SPI pins (on board)
9
- SPI_BIT_BANG_PINS = { clock: 13, input: 12 }
10
- REGISTER_SELECT_PIN = 9
11
-
12
- # Button pin (on register parallel outputs)
13
- BUTTON_PIN = 0
14
-
15
- board = Denko::Board.new(Denko::Connection::Serial.new)
16
-
17
- # 1-way (input) bit bang SPI interface on any pins (slower, but flexible).
18
- bus = Denko::SPI::BitBang.new(board: board, pins: SPI_BIT_BANG_PINS)
19
-
20
- # Use the default hardware SPI bus (faster, but predetermined pins).
21
- # bus = Denko::SPI::Bus.new(board: board)
22
-
23
- # Show the hardware SPI pins to aid connection.
24
- # MOSI = output | MISO = input | SCK = clock
25
- # puts board.map.select { |name, number| [:MOSI, :MISO, :SCK].include?(name) }
26
-
27
- # InputRegister needs a bus and its select pin. The CD4021 likes SPI mode 2.
28
- # Other options and their defaults:
29
- # bytes: 1 - For daisy-chaining registers
30
- # spi_frequency: 1000000 - Only affects hardware SPI interfaces
31
- # spi_mode: 0
32
- # spi_bit_order: :msbfirst
33
- #
34
- register = Denko::SPI::InputRegister.new(bus: bus, pin: REGISTER_SELECT_PIN, spi_mode: 2)
35
-
36
- # InputRegister implements enough of the Board interface that digital input
37
- # components can treat it as a Board. Do that with the Button.
38
- #
39
- # button starts listening automatically, which triggers register to start listening,
40
- # so it can update button as needed. Registers listen with an 8ms interval by default,
41
- # compared to the 4ms default for a Button directly connected to a Board.
42
- #
43
- button = Denko::DigitalIO::Button.new(pin: 0, board: register)
44
-
45
- # Button callbacks.
46
- button.down { puts "Button pressed" }
47
- button.up { puts "Button released" }
48
-
49
- # Sleep the main thread. Press the button and callbacks will run.
50
- sleep
@@ -1,49 +0,0 @@
1
- #
2
- # Example of LED connected through an output shift register (74HC595).
3
- # Can be used over either a bit bang or hardware SPI interface.
4
- #
5
- require 'bundler/setup'
6
- require 'denko'
7
-
8
- # SPI pins (on board)
9
- SPI_BIT_BANG_PINS = { clock: 13, output: 11 }
10
- REGISTER_SELECT_PIN = 10
11
-
12
- # LED pin (on register parallel outputs)
13
- LED_PIN = 0
14
-
15
- board = Denko::Board.new(Denko::Connection::Serial.new)
16
-
17
- # 1-way (output) bit bang SPI interface on any pins (slower, but flexible).
18
- bus = Denko::SPI::BitBang.new(board: board, pins: SPI_BIT_BANG_PINS)
19
-
20
- # Use the default hardware SPI bus (faster, but predetermined pins).
21
- # bus = Denko::SPI::Bus.new(board: board)
22
-
23
- # Show the hardware SPI pins to aid connection.
24
- # MOSI = output | MISO = input | SCK = clock
25
- # puts board.map.select { |name, number| [:MOSI, :MISO, :SCK].include?(name) }
26
-
27
- # OutputRegister needs a bus and its select pin.
28
- # Other options and their defaults:
29
- # bytes: 1 - For daisy-chaining registers
30
- # spi_frequency: 1000000 - Only affects hardware SPI interfaces
31
- # spi_mode: 0
32
- # spi_bit_order: :msbfirst
33
- # write_delay: 0.001 - How long to buffer writes, in seconds
34
- # buffer_writes: true - Wait for write_delay before writing whole register state.
35
- # Makes proxied components write pseudo-parallelly.
36
- #
37
- register = Denko::SPI::OutputRegister.new(bus: bus, pin: REGISTER_SELECT_PIN)
38
-
39
- # We can turn the LED on by writing a 1 to the lowest bit (0) of the register.
40
- register.write(0b00000001)
41
-
42
- # OutputRegister implements enough of the Board interface that digital output
43
- # components can treat it as a Board. Do that with the LED instead.
44
- #
45
- led = Denko::LED.new(board: register, pin: 0)
46
-
47
- # Blink the LED and sleep the main thread.
48
- led.blink 0.5
49
- sleep