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,40 +0,0 @@
1
- #
2
- # Example of SevenSegment LED driven though an output shift register (74HC595).
3
- # Can be used on 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
- # SevenSegment pins (on register parallel outputs)
13
- SEVEN_SEGMENT_PINS = { cathode: 0, a: 1, b: 2, c: 3, d: 4, e: 5, f: 6, g: 7 }
14
-
15
- board = Denko::Board.new(Denko::Connection::Serial.new)
16
-
17
- # 1-way bit bang SPI bus (slower, but use any pins).
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
- register = Denko::SPI::OutputRegister.new(bus: bus, pin: REGISTER_SELECT_PIN)
29
-
30
- #
31
- # OutputRegister implements enough of the Board interface that digital output
32
- # components can treat it as a Board. Do that with the SSD.
33
- #
34
- ssd = Denko::LED::SevenSegment.new(board: register, pins: SEVEN_SEGMENT_PINS)
35
-
36
- # Turn off the ssd on exit.
37
- trap("SIGINT") { exit !ssd.off }
38
-
39
- # Type a character and press Enter to show it on the SevenSegment LED.
40
- loop { ssd.display(gets.chomp) }
@@ -1,46 +0,0 @@
1
- #
2
- # Example of 2 SPI devices on the same bus with different select pins.
3
- # Combination of input_register.rb and output_register.rb
4
- #
5
- require 'bundler/setup'
6
- require 'denko'
7
-
8
- # SPI pins (on board)
9
- SPI_BIT_BANG_PINS = { clock: 13, input: 12, output: 11 }
10
- OUT_REGISTER_SELECT = 10
11
- IN_REGISTER_SELECT = 9
12
-
13
- # LED and Button pins (on their respective registers' parallel pins)
14
- LED_PIN = 0
15
- BUTTON_PIN = 0
16
-
17
- board = Denko::Board.new(Denko::Connection::Serial.new)
18
-
19
- # 2-way bit bang SPI bus (slower, but use any pins).
20
- bus = Denko::SPI::BitBang.new(board: board, pins: SPI_BIT_BANG_PINS)
21
-
22
- # Use the default hardware SPI bus (faster, but predetermined pins).
23
- # bus = Denko::SPI::Bus.new(board: board)
24
-
25
- # Show the hardware SPI pins to aid connection.
26
- # MOSI = output | MISO = input | SCK = clock
27
- # puts board.map.select { |name, number| [:MOSI, :MISO, :SCK].include?(name) }
28
-
29
- # OutputRegister needs a bus and its select pin.
30
- out_register = Denko::SPI::OutputRegister.new(bus: bus, pin: OUT_REGISTER_SELECT)
31
-
32
- # InputRegister needs a bus and its select pin. The CD4021 likes SPI mode 2.
33
- in_register = Denko::SPI::InputRegister.new(bus: bus, pin: IN_REGISTER_SELECT, spi_mode: 2)
34
-
35
- # LED connected to the output register.
36
- led = Denko::LED.new(board: out_register, pin: LED_PIN)
37
-
38
- # Button connected to the input register.
39
- button = Denko::DigitalIO::Button.new(board: in_register, pin: BUTTON_PIN)
40
-
41
- # Button callbacks.
42
- button.down { led.on; puts "Button pressed" }
43
- button.up { led.off; puts "Button released" }
44
-
45
- # Sleep the main thread. Press the button and callbacks will run.
46
- sleep
@@ -1,16 +0,0 @@
1
- #
2
- # Example that writes to hardware UART1 and reads back on bit bang UART. Tested on Arduino Mega.
3
- #
4
- require 'bundler/setup'
5
- require 'denko'
6
-
7
- board = Denko::Board.new(Denko::Connection::Serial.new)
8
-
9
- hw_uart = Denko::UART::Hardware.new(board: board, index: 1, baud: 31250)
10
- bb_uart = Denko::UART::BitBang.new(board: board, pins: { rx:10, tx:11 }, baud: 31250)
11
-
12
- hw_uart.write("Hello World!\n")
13
-
14
- sleep 1
15
-
16
- puts bb_uart.gets
@@ -1,16 +0,0 @@
1
- #
2
- # Example that writes to bit bang UART and reads back on hardware UART1. Tested on Arduino Mega.
3
- #
4
- require 'bundler/setup'
5
- require 'denko'
6
-
7
- board = Denko::Board.new(Denko::Connection::Serial.new)
8
-
9
- hw_uart = Denko::UART::Hardware.new(board: board, index: 1, baud: 31250)
10
- bb_uart = Denko::UART::BitBang.new(board: board, pins: { rx:10, tx:11 }, baud: 31250)
11
-
12
- bb_uart.write("Hello World!\n")
13
-
14
- sleep 1
15
-
16
- puts hw_uart.gets
@@ -1,34 +0,0 @@
1
- #
2
- # Example using one board's UART as the transport for a second board, also running Denko.
3
- #
4
- # For this example, board1 (direct) is an Arduino Mega. board2 (passthrough) is an Uno,
5
- # running Denko, with its UART pins (0, 1) connected to the Mega's UART1 pins (18, 19)
6
- #
7
- # This isn't 100% reliable. The Rx buffer on the direct board is periodically read, so
8
- # it can potentially overflow, causing data sent from the passthrough board to be lost.
9
- # Eventually flow control data will be lost and the host will stop sending altogether.
10
- #
11
- # Use at your own risk, but for the best possible performance:
12
- # 1) Avoid long running commands on the direct board (eg. IR transmission, HTU21D).
13
- # These block the CPU enough that the Rx buffer won't be read in time to avoid overflow.
14
- # 2) Use the lowest practical baud rate on the passthrough board. 19200 is used here, so
15
- # the direct board's Rx buffer takes 6x the time to fill, compared to 115200 baud.
16
- #
17
- require 'bundler/setup'
18
- require 'denko'
19
-
20
- board1 = Denko::Board.new(Denko::Connection::Serial.new)
21
-
22
- uart = Denko::UART::Hardware.new(board: board1, index: 1)
23
- board2 = Denko::Board.new(Denko::Connection::BoardUART.new(uart, baud: 19200))
24
-
25
- led1 = Denko::LED.new(board: board1, pin: 13)
26
- led1.blink(0.02)
27
-
28
- led2 = Denko::LED.new(board: board2, pin: 13)
29
- led2.blink(0.02)
30
-
31
- sensor = Denko::AnalogIO::Input.new(board: board1, pin: :A0)
32
- sensor.listen(4)
33
-
34
- sleep
@@ -1,16 +0,0 @@
1
- #
2
- # Example that writes to TX pin of hardware UART1 and reads back on RX pin of same UART.
3
- #
4
- require 'bundler/setup'
5
- require 'denko'
6
-
7
- board = Denko::Board.new(Denko::Connection::Serial.new)
8
-
9
- uart = Denko::UART::Hardware.new(board: board, index: 1, baud: 31250)
10
-
11
- uart.write("Hello World!\nBye World!\n")
12
-
13
- sleep 1
14
-
15
- puts uart.gets
16
- puts uart.gets
@@ -1,6 +0,0 @@
1
- module Denko
2
- module AnalogIO
3
- class Sensor < Input
4
- end
5
- end
6
- end
@@ -1,69 +0,0 @@
1
- module Denko
2
- module EEPROM
3
- class BuiltIn
4
- include Behaviors::Component
5
- include Behaviors::Reader
6
-
7
- public :state=
8
-
9
- def pin
10
- 254
11
- end
12
-
13
- def after_initialize(options={})
14
- super(options)
15
- self.state = Array.new(board.eeprom_length, nil)
16
- load
17
- end
18
-
19
- def load
20
- state.each_slice(128).with_index do |slice, index|
21
- read_using -> { board.eeprom_read(index * 128, slice.length) }
22
- end
23
- end
24
-
25
- def save
26
- @state_mutex.synchronize do
27
- @state.each_slice(128).with_index do |slice, index|
28
- board.eeprom_write(index * 128, slice)
29
- end
30
- end
31
- load
32
- end
33
-
34
- #
35
- # Specific Array-like methods for convenience.
36
- #
37
- def length; board.eeprom_length; end
38
- alias :count :length
39
-
40
- def [](index)
41
- @state_mutex.synchronize { @state.send :[], index }
42
- end
43
-
44
- def []=(index, value)
45
- @state_mutex.synchronize { @state.send :[]=, index, value }
46
- end
47
-
48
- def each(&block)
49
- @state_mutex.synchronize { @state.send :each, &block }
50
- end
51
-
52
- def each_with_index(&block)
53
- @state_mutex.synchronize { @state.send :each_with_index, &block }
54
- end
55
-
56
- def pre_callback_filter(message)
57
- address = message.split("-", 2)[0].to_i
58
- bytes = message.split("-", 2)[1].split(",").map(&:to_i)
59
- {address: address, data: bytes}
60
- end
61
-
62
- def update_state(hash)
63
- @state_mutex.synchronize do
64
- @state[hash[:address], hash[:data].length] = hash[:data]
65
- end
66
- end
67
- end
68
- end
69
- end
data/lib/denko/fonts.rb DELETED
@@ -1,106 +0,0 @@
1
- module Denko
2
- module Fonts
3
- #
4
- # Adapted from:
5
- # https://github.com/lexus2k/ssd1306/blob/master/src/ssd1306_fonts.c
6
- #
7
- FONT_6x8 = [
8
- [0x00, 0x00, 0x00, 0x00, 0x00, 0x00], # sp
9
- [0x00, 0x00, 0x00, 0x2f, 0x00, 0x00], # !
10
- [0x00, 0x00, 0x07, 0x00, 0x07, 0x00], # "
11
- [0x00, 0x14, 0x7f, 0x14, 0x7f, 0x14], # #
12
- [0x00, 0x24, 0x2a, 0x7f, 0x2a, 0x12], # $
13
- [0x00, 0x23, 0x13, 0x08, 0x64, 0x62], # %
14
- [0x00, 0x36, 0x49, 0x55, 0x22, 0x50], # &
15
- [0x00, 0x00, 0x05, 0x03, 0x00, 0x00], # '
16
- [0x00, 0x00, 0x1c, 0x22, 0x41, 0x00], # (
17
- [0x00, 0x00, 0x41, 0x22, 0x1c, 0x00], # )
18
- [0x00, 0x14, 0x08, 0x3E, 0x08, 0x14], # *
19
- [0x00, 0x08, 0x08, 0x3E, 0x08, 0x08], # +
20
- [0x00, 0x00, 0x00, 0xA0, 0x60, 0x00], # ,
21
- [0x00, 0x08, 0x08, 0x08, 0x08, 0x08], # -
22
- [0x00, 0x00, 0x60, 0x60, 0x00, 0x00], # .
23
- [0x00, 0x20, 0x10, 0x08, 0x04, 0x02], # /
24
- [0x00, 0x3E, 0x51, 0x49, 0x45, 0x3E], # 0
25
- [0x00, 0x00, 0x42, 0x7F, 0x40, 0x00], # 1
26
- [0x00, 0x42, 0x61, 0x51, 0x49, 0x46], # 2
27
- [0x00, 0x21, 0x41, 0x45, 0x4B, 0x31], # 3
28
- [0x00, 0x18, 0x14, 0x12, 0x7F, 0x10], # 4
29
- [0x00, 0x27, 0x45, 0x45, 0x45, 0x39], # 5
30
- [0x00, 0x3C, 0x4A, 0x49, 0x49, 0x30], # 6
31
- [0x00, 0x01, 0x71, 0x09, 0x05, 0x03], # 7
32
- [0x00, 0x36, 0x49, 0x49, 0x49, 0x36], # 8
33
- [0x00, 0x06, 0x49, 0x49, 0x29, 0x1E], # 9
34
- [0x00, 0x00, 0x36, 0x36, 0x00, 0x00], # :
35
- [0x00, 0x00, 0x56, 0x36, 0x00, 0x00], # ;
36
- [0x00, 0x08, 0x14, 0x22, 0x41, 0x00], # <
37
- [0x00, 0x14, 0x14, 0x14, 0x14, 0x14], # =
38
- [0x00, 0x00, 0x41, 0x22, 0x14, 0x08], # >
39
- [0x00, 0x02, 0x01, 0x51, 0x09, 0x06], # ?
40
- [0x00, 0x32, 0x49, 0x59, 0x51, 0x3E], # @
41
- [0x00, 0x7C, 0x12, 0x11, 0x12, 0x7C], # A
42
- [0x00, 0x7F, 0x49, 0x49, 0x49, 0x36], # B
43
- [0x00, 0x3E, 0x41, 0x41, 0x41, 0x22], # C
44
- [0x00, 0x7F, 0x41, 0x41, 0x22, 0x1C], # D
45
- [0x00, 0x7F, 0x49, 0x49, 0x49, 0x41], # E
46
- [0x00, 0x7F, 0x09, 0x09, 0x09, 0x01], # F
47
- [0x00, 0x3E, 0x41, 0x49, 0x49, 0x7A], # G
48
- [0x00, 0x7F, 0x08, 0x08, 0x08, 0x7F], # H
49
- [0x00, 0x00, 0x41, 0x7F, 0x41, 0x00], # I
50
- [0x00, 0x20, 0x40, 0x41, 0x3F, 0x01], # J
51
- [0x00, 0x7F, 0x08, 0x14, 0x22, 0x41], # K
52
- [0x00, 0x7F, 0x40, 0x40, 0x40, 0x40], # L
53
- [0x00, 0x7F, 0x02, 0x0C, 0x02, 0x7F], # M
54
- [0x00, 0x7F, 0x04, 0x08, 0x10, 0x7F], # N
55
- [0x00, 0x3E, 0x41, 0x41, 0x41, 0x3E], # O
56
- [0x00, 0x7F, 0x09, 0x09, 0x09, 0x06], # P
57
- [0x00, 0x3E, 0x41, 0x51, 0x21, 0x5E], # Q
58
- [0x00, 0x7F, 0x09, 0x19, 0x29, 0x46], # R
59
- [0x00, 0x46, 0x49, 0x49, 0x49, 0x31], # S
60
- [0x00, 0x01, 0x01, 0x7F, 0x01, 0x01], # T
61
- [0x00, 0x3F, 0x40, 0x40, 0x40, 0x3F], # U
62
- [0x00, 0x1F, 0x20, 0x40, 0x20, 0x1F], # V
63
- [0x00, 0x3F, 0x40, 0x38, 0x40, 0x3F], # W
64
- [0x00, 0x63, 0x14, 0x08, 0x14, 0x63], # X
65
- [0x00, 0x07, 0x08, 0x70, 0x08, 0x07], # Y
66
- [0x00, 0x61, 0x51, 0x49, 0x45, 0x43], # Z
67
- [0x00, 0x00, 0x7F, 0x41, 0x41, 0x00], # [
68
- [0x00, 0x02, 0x04, 0x08, 0x10, 0x20], # \
69
- [0x00, 0x00, 0x41, 0x41, 0x7F, 0x00], # ]
70
- [0x00, 0x04, 0x02, 0x01, 0x02, 0x04], # ^
71
- [0x00, 0x40, 0x40, 0x40, 0x40, 0x40], # _
72
- [0x00, 0x00, 0x01, 0x02, 0x04, 0x00], # '
73
- [0x00, 0x20, 0x54, 0x54, 0x54, 0x78], # a
74
- [0x00, 0x7F, 0x48, 0x44, 0x44, 0x38], # b
75
- [0x00, 0x38, 0x44, 0x44, 0x44, 0x20], # c
76
- [0x00, 0x38, 0x44, 0x44, 0x48, 0x7F], # d
77
- [0x00, 0x38, 0x54, 0x54, 0x54, 0x18], # e
78
- [0x00, 0x08, 0x7E, 0x09, 0x01, 0x02], # f
79
- [0x00, 0x18, 0xA4, 0xA4, 0xA4, 0x7C], # g
80
- [0x00, 0x7F, 0x08, 0x04, 0x04, 0x78], # h
81
- [0x00, 0x00, 0x44, 0x7D, 0x40, 0x00], # i
82
- [0x00, 0x40, 0x80, 0x84, 0x7D, 0x00], # j
83
- [0x00, 0x7F, 0x10, 0x28, 0x44, 0x00], # k
84
- [0x00, 0x00, 0x41, 0x7F, 0x40, 0x00], # l
85
- [0x00, 0x7C, 0x04, 0x18, 0x04, 0x78], # m
86
- [0x00, 0x7C, 0x08, 0x04, 0x04, 0x78], # n
87
- [0x00, 0x38, 0x44, 0x44, 0x44, 0x38], # o
88
- [0x00, 0xFC, 0x24, 0x24, 0x24, 0x18], # p
89
- [0x00, 0x18, 0x24, 0x24, 0x18, 0xFC], # q
90
- [0x00, 0x7C, 0x08, 0x04, 0x04, 0x08], # r
91
- [0x00, 0x48, 0x54, 0x54, 0x54, 0x20], # s
92
- [0x00, 0x04, 0x3F, 0x44, 0x40, 0x20], # t
93
- [0x00, 0x3C, 0x40, 0x40, 0x20, 0x7C], # u
94
- [0x00, 0x1C, 0x20, 0x40, 0x20, 0x1C], # v
95
- [0x00, 0x3C, 0x40, 0x30, 0x40, 0x3C], # w
96
- [0x00, 0x44, 0x28, 0x10, 0x28, 0x44], # x
97
- [0x00, 0x1C, 0xA0, 0xA0, 0xA0, 0x7C], # y
98
- [0x00, 0x44, 0x64, 0x54, 0x4C, 0x44], # z
99
- [0x00, 0x00, 0x08, 0x77, 0x00, 0x00], # {
100
- [0x00, 0x00, 0x00, 0x7F, 0x00, 0x00], # |
101
- [0x00, 0x00, 0x77, 0x08, 0x00, 0x00], # }
102
- [0x00, 0x10, 0x08, 0x10, 0x08, 0x00], # ~
103
- [0x14, 0x14, 0x14, 0x14, 0x14, 0x14], # horiz lines # DEL
104
- ]
105
- end
106
- end
@@ -1,42 +0,0 @@
1
- module Denko
2
- module Sensor
3
- class Temperature
4
- include Behaviors::Poller
5
-
6
- def initialize(sensor)
7
- @sensor = sensor
8
- super
9
- end
10
-
11
- def _read
12
- @sensor.read_temperature
13
- end
14
-
15
- alias :celsius :state
16
- alias :to_i :state
17
-
18
- def fahrenheit
19
- (celsius * 9 / 5) + 32
20
- end
21
-
22
- def kelvin
23
- celsius + 273.15
24
- end
25
- end
26
-
27
- class Humidity
28
- include Behaviors::Poller
29
-
30
- def initialize(sensor)
31
- @sensor = sensor
32
- super
33
- end
34
-
35
- def _read
36
- @sensor.read_humidity
37
- end
38
-
39
- alias :to_i :state
40
- end
41
- end
42
- end
@@ -1,26 +0,0 @@
1
- //
2
- // Denko IR output for the ESP8266 and ESP32.
3
- // Depends on: https://github.com/crankyoldgit/IRremoteESP8266
4
- // DENKO_IR_OUT must be defeind in DenkoDefines.h
5
- //
6
- #include "Denko.h"
7
- #if defined(DENKO_IR_OUT) && (defined(ESP8266) || defined(ESP32))
8
-
9
- #include <IRremoteESP8266.h>
10
- #include <IRsend.h>
11
-
12
- // CMD = 16
13
- // Send an infrared signal.
14
- void Denko::irSend(){
15
- // Byte 1+ of auxMsg is already little-endian uint16 pulses.
16
- uint16_t *pulseArray = reinterpret_cast<uint16_t *>(auxMsg + 1);
17
-
18
- // Can work on any pin.
19
- IRsend infraredOut(pin);
20
- infraredOut.begin();
21
-
22
- // auxMsg[0] is how many pulses were packed.
23
- // val is frequency
24
- infraredOut.sendRaw(pulseArray, auxMsg[0], val);
25
- }
26
- #endif
@@ -1,61 +0,0 @@
1
- require_relative '../test_helper'
2
-
3
- class BoardMock < Denko::Board
4
- attr_reader :eeprom_stub
5
-
6
- def eeprom_read(start_address, length)
7
- # Initialize a fake EEPROM
8
- @eeprom_stub ||= Array.new(eeprom_length){255}
9
-
10
- # Pack it up like a string coming from the board.
11
- string = @eeprom_stub[start_address, length].map{ |x| x.to_s }.join(",")
12
-
13
- # Update ourselves with it.
14
- self.update("254:#{start_address}-#{string}\n")
15
- end
16
-
17
- def eeprom_write(start_address, bytes)
18
- @eeprom_stub[start_address, bytes.length] = bytes
19
- end
20
- end
21
-
22
- class BuiltInEEPROMTest < Minitest::Test
23
- def board
24
- @board ||= BoardMock.new
25
- end
26
-
27
- def part
28
- @part ||= board.eeprom
29
- end
30
-
31
- def test_pin_ee
32
- assert_equal part.pin, 254
33
- end
34
-
35
- def test_loads_on_initialize_and_updates_correctly
36
- assert_equal part.state, Array.new(board.eeprom_length){255}
37
- end
38
-
39
- def test_delegates_to_state_array
40
- mock = Minitest::Mock.new
41
- mock.expect(:[], 255, [0])
42
- mock.expect(:[]=, 128, [1, 128])
43
- mock.expect(:each, nil)
44
- mock.expect(:each_with_index, nil)
45
-
46
- part.stub(:state, mock) do
47
- part[0]
48
- part[1] = 128
49
- part.each { |el| el }
50
- part.each_with_index { |el| el }
51
- end
52
- end
53
-
54
- def test_saves_to_the_board
55
- part[0] = 128
56
- part[part.length] = 127
57
- part.save
58
- assert_equal board.eeprom_stub[0], 128
59
- assert_equal board.eeprom_stub[board.eeprom_length], 127
60
- end
61
- end
Binary file
Binary file
@@ -1,73 +0,0 @@
1
- #
2
- # Example 1: Controlling an LED
3
- #
4
- require 'bundler/setup'
5
- require 'denko'
6
-
7
- # If the board is plugged into a USB port, we can connect with serial over USB.
8
- connection = Denko::Connection::Serial.new
9
-
10
- # Create a new board object, giving the connection.
11
- board = Denko::Board.new(connection)
12
-
13
- #
14
- # Create an LED object, giving the board, and the pin that the positive
15
- # leg of the LED is connected to. The longer leg is usually positive.
16
- #
17
- # See led.pdf in this folder for a hook-up diagram.
18
- # Use a current limiting resistor with external LEDs to protect them.
19
- #
20
- # The on-board LED can also be used. It is connected to pin 13 on most Arduinos,
21
- # but can vary for other boards. The symbol :LED_BUILTIN should map to the right pin.
22
- # If it doesn't, change it to the pin number from your board's documentation.
23
- #
24
- # Note: Some boards use an addressable LED on-board. In those cases, connect an external
25
- # LED and use its pin for this example instead.
26
- #
27
- led = Denko::LED.new(board: board, pin: :LED_BUILTIN)
28
-
29
- # Now we can make it blink.
30
- puts "Blinking every half second..."
31
-
32
- #
33
- # A digital output can only have one of two states:
34
- # 1 / high / on
35
- # 0 / low / off
36
- # We can use led.digital_write to set it directly, or named convenience methods.
37
- # These 3 lines all do the same thing: turn on, wait half a second, turn off.
38
- #
39
- led.digital_write(1); sleep 0.5; led.digital_write(0)
40
- led.high; sleep 0.5; led.low
41
- led.on; sleep 0.5; led.off
42
-
43
- #
44
- # led.toggle will set it to the opposite state each time it's called.
45
- # Keep it blinking for 3 more seconds using #toggle.
46
- #
47
- 6.times do
48
- led.toggle
49
- sleep 0.5
50
- end
51
-
52
- #
53
- # What if we want to blink in the background?
54
- #
55
- # led.blink runs in a separate thread, managed by the led, and doesn't block the
56
- # main thread. Give it the blink interval in seconds.
57
- #
58
- led.blink 0.5
59
- puts "Blinking in the background... Hello from the main thread!"
60
- sleep 3
61
-
62
- #
63
- # Calling a method that sets the state (#digital_write, #high, #low, #on, #off)
64
- # automatically stops the blink thread.
65
- #
66
- puts "Turning off for 2 seconds..."
67
- led.off
68
- sleep 2
69
-
70
- # Blink faster indefinitely.
71
- puts "Blinking faster forever... (Press Ctrl+C to exit)"
72
- led.blink 0.1
73
- sleep
Binary file
Binary file
@@ -1,64 +0,0 @@
1
- #
2
- # Example 2: Using a Button
3
- #
4
- require 'bundler/setup'
5
- require 'denko'
6
-
7
- # Set up the board, connecting with serial over USB.
8
- board = Denko::Board.new(Denko::Connection::Serial.new)
9
-
10
- #
11
- # Create an object for a momentary button, giving the board, and the pin that
12
- # the ungrounded side of the button is connected to.
13
- #
14
- # `pullup: true` tells the board to keep the input pin high (logical 1) when the
15
- # button is not pressed. Without this (or an external pullup resistor), the pin
16
- # might float between 0 and 1, giving incorrect readings. When the button is
17
- # pressed, it pulls the input pin down to ground (0).
18
- #
19
- # See button.pdf in this folder for a hook-up diagram.
20
- #
21
- button = Denko::DigitalIO::Button.new(board: board, pin: 7, pullup: true)
22
-
23
- #
24
- # As soon as a Button (or any DigitalInput) is created, the board starts
25
- # listening for changes to the physical button. When that happens, our button
26
- # object is notified. To catch these notifications, we have to use a callback.
27
- # button.add_callback saves a block of code to run each time the button state changes.
28
- #
29
- # The callback below checks if the state is 0 (the button went from up to down),
30
- # then counts and prints the number of times pressed.
31
- #
32
- presses = 0
33
- button.add_callback(:count_presses) do |state|
34
- if state == 0
35
- presses = presses + 1
36
- puts "Button press ##{presses}"
37
- end
38
- end
39
-
40
- # Wait for the button to be pressed 3 times.
41
- sleep 0.005 while presses < 3
42
-
43
- # Button keeps its callbacks in a Hash. We can be specific and use keys to add and remove.
44
- button.remove_callback(:count_presses)
45
-
46
- # Or remove them all. Either way, the block above won't run anymore.
47
- button.remove_callbacks
48
-
49
- #
50
- # button.down and button.up add callbacks that automatically check state for you.
51
- #
52
- # #down runs only when state goes from high (1) to low (0).
53
- # #up runs only when state goes from low (0) to high (1).
54
- #
55
- # We can use them to control the internal LED from example 1.
56
- #
57
- led = Denko::LED.new(board: board, pin: 13)
58
-
59
- button.up { led.off }
60
- button.down { led.on }
61
-
62
- puts "Press the button to turn on the LED... (Ctrl+C to exit)"
63
-
64
- sleep