denko 0.13.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 (627) hide show
  1. checksums.yaml +7 -0
  2. data/.github/workflows/build_avr.yml +61 -0
  3. data/.github/workflows/build_esp32.yml +58 -0
  4. data/.github/workflows/build_esp8266.yml +57 -0
  5. data/.github/workflows/build_megaavr.yml +61 -0
  6. data/.github/workflows/build_rp2040.yml +61 -0
  7. data/.github/workflows/build_sam3x.yml +59 -0
  8. data/.github/workflows/build_samd.yml +61 -0
  9. data/.github/workflows/ruby.yml +47 -0
  10. data/.gitignore +24 -0
  11. data/.gitmodules +3 -0
  12. data/.vscode/settings.json +5 -0
  13. data/.vscode/tasks.json +20 -0
  14. data/CHANGELOG.md +466 -0
  15. data/DEPS_CLI.md +80 -0
  16. data/DEPS_IDE.md +120 -0
  17. data/Gemfile +4 -0
  18. data/HARDWARE.md +195 -0
  19. data/LICENSE +22 -0
  20. data/README.md +152 -0
  21. data/Rakefile +11 -0
  22. data/bin/denko +22 -0
  23. data/build +27 -0
  24. data/denko.gemspec +47 -0
  25. data/examples/advanced/rotary_encoder_mac_volume.rb +48 -0
  26. data/examples/advanced/ssd1306_time_temp_rh.rb +48 -0
  27. data/examples/analog_io/ads1118.rb +74 -0
  28. data/examples/analog_io/dac_loopback.rb +32 -0
  29. data/examples/analog_io/input.rb +52 -0
  30. data/examples/connection/tcp.rb +34 -0
  31. data/examples/digital_io/rotary_encoder.rb +26 -0
  32. data/examples/display/hd44780.png +0 -0
  33. data/examples/display/hd44780.rb +39 -0
  34. data/examples/display/ssd1306.rb +40 -0
  35. data/examples/display/ssd1306_s2_pico.rb +29 -0
  36. data/examples/eeprom/built_in.rb +32 -0
  37. data/examples/i2c/search.rb +53 -0
  38. data/examples/led/apa102_bounce.rb +33 -0
  39. data/examples/led/apa102_breathe.rb +45 -0
  40. data/examples/led/builtin_blink.rb +12 -0
  41. data/examples/led/seven_segment_char_echo.rb +15 -0
  42. data/examples/led/ws2812_bounce.rb +32 -0
  43. data/examples/led/ws2812_builtin_blink.rb +21 -0
  44. data/examples/motor/l298.rb +43 -0
  45. data/examples/motor/servo.rb +16 -0
  46. data/examples/motor/stepper.png +0 -0
  47. data/examples/motor/stepper.rb +43 -0
  48. data/examples/pulse_io/buzzer.rb +30 -0
  49. data/examples/pulse_io/ir_transmitter.rb +55 -0
  50. data/examples/rtc/ds3231.rb +48 -0
  51. data/examples/sensor/aht10.rb +15 -0
  52. data/examples/sensor/aht20.rb +15 -0
  53. data/examples/sensor/bme280.rb +75 -0
  54. data/examples/sensor/dht.rb +24 -0
  55. data/examples/sensor/ds18b20.rb +58 -0
  56. data/examples/sensor/htu21d.rb +54 -0
  57. data/examples/sensor/htu31d.rb +31 -0
  58. data/examples/spi/input_register.rb +50 -0
  59. data/examples/spi/output_register.rb +49 -0
  60. data/examples/spi/ssd_through_register.rb +40 -0
  61. data/examples/spi/two_registers.rb +46 -0
  62. data/examples/uart/bit_bang_read.rb +16 -0
  63. data/examples/uart/bit_bang_write.rb +16 -0
  64. data/examples/uart/board_passthrough.rb +34 -0
  65. data/examples/uart/hardware_loopback.rb +16 -0
  66. data/lib/denko/analog_io/ads1118.rb +182 -0
  67. data/lib/denko/analog_io/input.rb +79 -0
  68. data/lib/denko/analog_io/output.rb +20 -0
  69. data/lib/denko/analog_io/potentiometer.rb +15 -0
  70. data/lib/denko/analog_io/sensor.rb +6 -0
  71. data/lib/denko/analog_io.rb +9 -0
  72. data/lib/denko/behaviors/board_proxy.rb +23 -0
  73. data/lib/denko/behaviors/bus_controller.rb +11 -0
  74. data/lib/denko/behaviors/bus_controller_addressed.rb +15 -0
  75. data/lib/denko/behaviors/bus_peripheral.rb +21 -0
  76. data/lib/denko/behaviors/bus_peripheral_addressed.rb +15 -0
  77. data/lib/denko/behaviors/callbacks.rb +67 -0
  78. data/lib/denko/behaviors/component.rb +48 -0
  79. data/lib/denko/behaviors/input_pin.rb +24 -0
  80. data/lib/denko/behaviors/listener.rb +22 -0
  81. data/lib/denko/behaviors/multi_pin.rb +72 -0
  82. data/lib/denko/behaviors/output_pin.rb +13 -0
  83. data/lib/denko/behaviors/poller.rb +31 -0
  84. data/lib/denko/behaviors/reader.rb +49 -0
  85. data/lib/denko/behaviors/single_pin.rb +26 -0
  86. data/lib/denko/behaviors/state.rb +24 -0
  87. data/lib/denko/behaviors/subcomponents.rb +35 -0
  88. data/lib/denko/behaviors/threaded.rb +54 -0
  89. data/lib/denko/behaviors.rb +26 -0
  90. data/lib/denko/board/core.rb +151 -0
  91. data/lib/denko/board/eeprom.rb +20 -0
  92. data/lib/denko/board/i2c.rb +68 -0
  93. data/lib/denko/board/infrared.rb +18 -0
  94. data/lib/denko/board/led_array.rb +18 -0
  95. data/lib/denko/board/map.rb +46 -0
  96. data/lib/denko/board/message_pack.rb +7 -0
  97. data/lib/denko/board/one_wire.rb +34 -0
  98. data/lib/denko/board/pulse.rb +26 -0
  99. data/lib/denko/board/servo.rb +22 -0
  100. data/lib/denko/board/spi.rb +65 -0
  101. data/lib/denko/board/spi_bit_bang.rb +41 -0
  102. data/lib/denko/board/tone.rb +23 -0
  103. data/lib/denko/board/uart.rb +42 -0
  104. data/lib/denko/board/uart_bit_bang.rb +33 -0
  105. data/lib/denko/board.rb +104 -0
  106. data/lib/denko/connection/base.rb +75 -0
  107. data/lib/denko/connection/board_uart.rb +36 -0
  108. data/lib/denko/connection/flow_control.rb +153 -0
  109. data/lib/denko/connection/handshake.rb +60 -0
  110. data/lib/denko/connection/serial.rb +90 -0
  111. data/lib/denko/connection/tcp.rb +44 -0
  112. data/lib/denko/connection.rb +10 -0
  113. data/lib/denko/digital_io/button.rb +8 -0
  114. data/lib/denko/digital_io/input.rb +44 -0
  115. data/lib/denko/digital_io/output.rb +47 -0
  116. data/lib/denko/digital_io/relay.rb +6 -0
  117. data/lib/denko/digital_io/rotary_encoder.rb +107 -0
  118. data/lib/denko/digital_io.rb +9 -0
  119. data/lib/denko/display/canvas.rb +282 -0
  120. data/lib/denko/display/hd44780.rb +266 -0
  121. data/lib/denko/display/ssd1306.rb +179 -0
  122. data/lib/denko/display.rb +7 -0
  123. data/lib/denko/eeprom/built_in.rb +69 -0
  124. data/lib/denko/eeprom.rb +5 -0
  125. data/lib/denko/fonts.rb +106 -0
  126. data/lib/denko/i2c/bus.rb +52 -0
  127. data/lib/denko/i2c/peripheral.rb +38 -0
  128. data/lib/denko/i2c.rb +6 -0
  129. data/lib/denko/led/apa102.rb +87 -0
  130. data/lib/denko/led/base.rb +12 -0
  131. data/lib/denko/led/rgb.rb +38 -0
  132. data/lib/denko/led/seven_segment.rb +111 -0
  133. data/lib/denko/led/ws2812.rb +48 -0
  134. data/lib/denko/led.rb +13 -0
  135. data/lib/denko/message.rb +92 -0
  136. data/lib/denko/motor/l298.rb +49 -0
  137. data/lib/denko/motor/servo.rb +51 -0
  138. data/lib/denko/motor/stepper.rb +71 -0
  139. data/lib/denko/motor.rb +7 -0
  140. data/lib/denko/one_wire/bus.rb +61 -0
  141. data/lib/denko/one_wire/bus_enumeration.rb +88 -0
  142. data/lib/denko/one_wire/constants.rb +17 -0
  143. data/lib/denko/one_wire/helper.rb +33 -0
  144. data/lib/denko/one_wire/peripheral.rb +62 -0
  145. data/lib/denko/one_wire.rb +9 -0
  146. data/lib/denko/pulse_io/buzzer.rb +25 -0
  147. data/lib/denko/pulse_io/ir_transmitter.rb +22 -0
  148. data/lib/denko/pulse_io/pwm_output.rb +34 -0
  149. data/lib/denko/pulse_io.rb +7 -0
  150. data/lib/denko/rtc/ds3231.rb +48 -0
  151. data/lib/denko/rtc.rb +5 -0
  152. data/lib/denko/sensor/aht.rb +165 -0
  153. data/lib/denko/sensor/bme280.rb +366 -0
  154. data/lib/denko/sensor/dht.rb +43 -0
  155. data/lib/denko/sensor/ds18b20.rb +74 -0
  156. data/lib/denko/sensor/htu21d.rb +168 -0
  157. data/lib/denko/sensor/htu31d.rb +187 -0
  158. data/lib/denko/sensor/virtual.rb +42 -0
  159. data/lib/denko/sensor.rb +13 -0
  160. data/lib/denko/spi/base_register.rb +37 -0
  161. data/lib/denko/spi/bit_bang.rb +74 -0
  162. data/lib/denko/spi/bus.rb +44 -0
  163. data/lib/denko/spi/input_register.rb +130 -0
  164. data/lib/denko/spi/output_register.rb +67 -0
  165. data/lib/denko/spi/peripheral.rb +43 -0
  166. data/lib/denko/spi.rb +10 -0
  167. data/lib/denko/uart/bit_bang.rb +69 -0
  168. data/lib/denko/uart/hardware.rb +65 -0
  169. data/lib/denko/uart.rb +6 -0
  170. data/lib/denko/version.rb +3 -0
  171. data/lib/denko.rb +39 -0
  172. data/lib/denko_cli/generator.rb +171 -0
  173. data/lib/denko_cli/helper.rb +29 -0
  174. data/lib/denko_cli/missing_files.txt +20 -0
  175. data/lib/denko_cli/packages.rb +101 -0
  176. data/lib/denko_cli/parser.rb +73 -0
  177. data/lib/denko_cli/targets.rb +30 -0
  178. data/lib/denko_cli/targets.txt +113 -0
  179. data/lib/denko_cli/usage.txt +34 -0
  180. data/lib/denko_cli.rb +18 -0
  181. data/src/denko_ethernet.ino +78 -0
  182. data/src/denko_serial.ino +41 -0
  183. data/src/denko_wifi.ino +157 -0
  184. data/src/lib/Denko.cpp +330 -0
  185. data/src/lib/Denko.h +259 -0
  186. data/src/lib/DenkoCoreIO.cpp +322 -0
  187. data/src/lib/DenkoDefines.h +116 -0
  188. data/src/lib/DenkoEEPROM.cpp +64 -0
  189. data/src/lib/DenkoI2C.cpp +155 -0
  190. data/src/lib/DenkoIROut.cpp +33 -0
  191. data/src/lib/DenkoIROutESP.cpp +26 -0
  192. data/src/lib/DenkoLEDArray.cpp +49 -0
  193. data/src/lib/DenkoOneWire.cpp +156 -0
  194. data/src/lib/DenkoPulseInput.cpp +57 -0
  195. data/src/lib/DenkoSPI.cpp +165 -0
  196. data/src/lib/DenkoSPIBB.cpp +156 -0
  197. data/src/lib/DenkoServo.cpp +83 -0
  198. data/src/lib/DenkoTone.cpp +25 -0
  199. data/src/lib/DenkoUART.cpp +118 -0
  200. data/src/lib/DenkoUARTBB.cpp +62 -0
  201. data/target.yml +3 -0
  202. data/test/analog_io/input_test.rb +38 -0
  203. data/test/analog_io/output_test.rb +26 -0
  204. data/test/analog_io/potentiometer_test.rb +62 -0
  205. data/test/behaviors/board_proxy_test.rb +24 -0
  206. data/test/behaviors/bus_controller_addressed_test.rb +40 -0
  207. data/test/behaviors/bus_controller_test.rb +28 -0
  208. data/test/behaviors/bus_peripheral_addressed.rb +44 -0
  209. data/test/behaviors/bus_peripheral_test.rb +39 -0
  210. data/test/behaviors/callbacks_test.rb +118 -0
  211. data/test/behaviors/component_test.rb +56 -0
  212. data/test/behaviors/input_pin_test.rb +42 -0
  213. data/test/behaviors/listener_test.rb +60 -0
  214. data/test/behaviors/multi_pin_test.rb +70 -0
  215. data/test/behaviors/output_pin_test.rb +27 -0
  216. data/test/behaviors/poller_test.rb +64 -0
  217. data/test/behaviors/reader_test.rb +68 -0
  218. data/test/behaviors/single_pin_test.rb +41 -0
  219. data/test/behaviors/subcomponents_test.rb +75 -0
  220. data/test/behaviors/threaded_test.rb +98 -0
  221. data/test/board/board_test.rb +130 -0
  222. data/test/board/core_test.rb +182 -0
  223. data/test/board/eeprom_test.rb +34 -0
  224. data/test/board/helper_test.rb +38 -0
  225. data/test/board/i2c_test.rb +114 -0
  226. data/test/board/infrared_test.rb +37 -0
  227. data/test/board/message_test.rb +54 -0
  228. data/test/board/one_wire_test.rb +69 -0
  229. data/test/board/pulse_test.rb +51 -0
  230. data/test/board/servo_test.rb +47 -0
  231. data/test/board/spi_test.rb +97 -0
  232. data/test/board/tone_test.rb +42 -0
  233. data/test/connection/serial_test.rb +172 -0
  234. data/test/connection/tcp_test.rb +37 -0
  235. data/test/digital_io/input_test.rb +65 -0
  236. data/test/digital_io/output_test.rb +64 -0
  237. data/test/digital_io/rotary_encoder_test.rb +99 -0
  238. data/test/display/hd44780_test.rb +23 -0
  239. data/test/eeprom/built_in_test.rb +61 -0
  240. data/test/i2c/bus_test.rb +66 -0
  241. data/test/i2c/peripheral_test.rb +50 -0
  242. data/test/led/base_test.rb +24 -0
  243. data/test/led/rgb_test.rb +64 -0
  244. data/test/led/seven_segment_test.rb +86 -0
  245. data/test/motor/servo_test.rb +62 -0
  246. data/test/motor/stepper_test.rb +51 -0
  247. data/test/one_wire/bus_enumerator_test.rb +134 -0
  248. data/test/one_wire/bus_test.rb +142 -0
  249. data/test/one_wire/helper_test.rb +18 -0
  250. data/test/one_wire/peripheral_test.rb +158 -0
  251. data/test/pulse_io/buzzer_test.rb +48 -0
  252. data/test/pulse_io/ir_transmitter_test.rb +38 -0
  253. data/test/pulse_io/pwm_output_test.rb +72 -0
  254. data/test/rtc/ds3231_test.rb +55 -0
  255. data/test/sensor/dht_test.rb +64 -0
  256. data/test/sensor/ds18b20_test.rb +107 -0
  257. data/test/spi/base_register_test.rb +34 -0
  258. data/test/spi/bus_test.rb +76 -0
  259. data/test/spi/input_register_test.rb +140 -0
  260. data/test/spi/output_register_test.rb +93 -0
  261. data/test/test_helper.rb +223 -0
  262. data/test/uart/bitbang_test.rb +37 -0
  263. data/tutorial/01-led/led.fzz +0 -0
  264. data/tutorial/01-led/led.pdf +0 -0
  265. data/tutorial/01-led/led.rb +73 -0
  266. data/tutorial/02-button/button.fzz +0 -0
  267. data/tutorial/02-button/button.pdf +0 -0
  268. data/tutorial/02-button/button.rb +64 -0
  269. data/tutorial/03-potentiometer/potentiometer.fzz +0 -0
  270. data/tutorial/03-potentiometer/potentiometer.pdf +0 -0
  271. data/tutorial/03-potentiometer/potentiometer.rb +62 -0
  272. data/tutorial/04-pwm_led/pwm_led.fzz +0 -0
  273. data/tutorial/04-pwm_led/pwm_led.pdf +0 -0
  274. data/tutorial/04-pwm_led/pwm_led.rb +66 -0
  275. data/tutorial/05-rgb_led/rgb_led.fzz +0 -0
  276. data/tutorial/05-rgb_led/rgb_led.pdf +0 -0
  277. data/tutorial/05-rgb_led/rgb_led.rb +58 -0
  278. data/tutorial/05-rgb_led/rgb_mapping.rb +76 -0
  279. data/vendor/board-maps/.gitignore +56 -0
  280. data/vendor/board-maps/.gitmodules +21 -0
  281. data/vendor/board-maps/BoardMap.h +1364 -0
  282. data/vendor/board-maps/README.md +51 -0
  283. data/vendor/board-maps/lib/boards_parser.rb +66 -0
  284. data/vendor/board-maps/lib/header_parser.rb +164 -0
  285. data/vendor/board-maps/run.rb +47 -0
  286. data/vendor/board-maps/yaml/0XCB_HELIOS.yml +48 -0
  287. data/vendor/board-maps/yaml/ADAFRUIT_FEATHER_ESP32S2.yml +25 -0
  288. data/vendor/board-maps/yaml/ADAFRUIT_FEATHER_ESP32S2_REVTFT.yml +25 -0
  289. data/vendor/board-maps/yaml/ADAFRUIT_FEATHER_ESP32S2_TFT.yml +27 -0
  290. data/vendor/board-maps/yaml/ADAFRUIT_FEATHER_ESP32S3.yml +29 -0
  291. data/vendor/board-maps/yaml/ADAFRUIT_FEATHER_ESP32S3_NOPSRAM.yml +29 -0
  292. data/vendor/board-maps/yaml/ADAFRUIT_FEATHER_ESP32S3_REVTFT.yml +25 -0
  293. data/vendor/board-maps/yaml/ADAFRUIT_FEATHER_ESP32S3_TFT.yml +27 -0
  294. data/vendor/board-maps/yaml/ADAFRUIT_FEATHER_ESP32_V2.yml +30 -0
  295. data/vendor/board-maps/yaml/ADAFRUIT_FEATHER_RP2040.yml +48 -0
  296. data/vendor/board-maps/yaml/ADAFRUIT_FEATHER_RP2040_CAN.yml +48 -0
  297. data/vendor/board-maps/yaml/ADAFRUIT_FEATHER_RP2040_DVI.yml +48 -0
  298. data/vendor/board-maps/yaml/ADAFRUIT_FEATHER_RP2040_PROP_MAKER.yml +48 -0
  299. data/vendor/board-maps/yaml/ADAFRUIT_FEATHER_RP2040_RFM.yml +48 -0
  300. data/vendor/board-maps/yaml/ADAFRUIT_FEATHER_RP2040_SCORPIO.yml +48 -0
  301. data/vendor/board-maps/yaml/ADAFRUIT_FEATHER_RP2040_THINKINK.yml +48 -0
  302. data/vendor/board-maps/yaml/ADAFRUIT_FEATHER_RP2040_USB_HOST.yml +48 -0
  303. data/vendor/board-maps/yaml/ADAFRUIT_ITSYBITSY_ESP32.yml +24 -0
  304. data/vendor/board-maps/yaml/ADAFRUIT_ITSYBITSY_RP2040.yml +48 -0
  305. data/vendor/board-maps/yaml/ADAFRUIT_KB2040_RP2040.yml +48 -0
  306. data/vendor/board-maps/yaml/ADAFRUIT_MACROPAD_RP2040.yml +48 -0
  307. data/vendor/board-maps/yaml/ADAFRUIT_MATRIXPORTAL_ESP32S3.yml +16 -0
  308. data/vendor/board-maps/yaml/ADAFRUIT_QTPY_ESP32C3.yml +12 -0
  309. data/vendor/board-maps/yaml/ADAFRUIT_QTPY_ESP32S2.yml +22 -0
  310. data/vendor/board-maps/yaml/ADAFRUIT_QTPY_ESP32S3_NOPSRAM.yml +20 -0
  311. data/vendor/board-maps/yaml/ADAFRUIT_QTPY_ESP32_PICO.yml +27 -0
  312. data/vendor/board-maps/yaml/ADAFRUIT_QTPY_RP2040.yml +48 -0
  313. data/vendor/board-maps/yaml/ADAFRUIT_STEMMAFRIEND_RP2040.yml +48 -0
  314. data/vendor/board-maps/yaml/ADAFRUIT_TRINKEYQT_RP2040.yml +48 -0
  315. data/vendor/board-maps/yaml/ALKS.yml +34 -0
  316. data/vendor/board-maps/yaml/AMPERKA_WIFI_SLOT.yml +16 -0
  317. data/vendor/board-maps/yaml/AVR_ADK.yml +24 -0
  318. data/vendor/board-maps/yaml/AVR_BT.yml +16 -0
  319. data/vendor/board-maps/yaml/AVR_CIRCUITPLAY.yml +14 -0
  320. data/vendor/board-maps/yaml/AVR_DUEMILANOVE.yml +16 -0
  321. data/vendor/board-maps/yaml/AVR_ESPLORA.yml +20 -0
  322. data/vendor/board-maps/yaml/AVR_ETHERNET.yml +16 -0
  323. data/vendor/board-maps/yaml/AVR_FIO.yml +16 -0
  324. data/vendor/board-maps/yaml/AVR_GEMMA.yml +6 -0
  325. data/vendor/board-maps/yaml/AVR_INDUSTRIAL101.yml +20 -0
  326. data/vendor/board-maps/yaml/AVR_LEONARDO.yml +20 -0
  327. data/vendor/board-maps/yaml/AVR_LEONARDO_ETH.yml +20 -0
  328. data/vendor/board-maps/yaml/AVR_LILYPAD.yml +16 -0
  329. data/vendor/board-maps/yaml/AVR_LILYPAD_USB.yml +20 -0
  330. data/vendor/board-maps/yaml/AVR_LININO_ONE.yml +20 -0
  331. data/vendor/board-maps/yaml/AVR_MEGA.yml +24 -0
  332. data/vendor/board-maps/yaml/AVR_MEGA2560.yml +24 -0
  333. data/vendor/board-maps/yaml/AVR_MICRO.yml +20 -0
  334. data/vendor/board-maps/yaml/AVR_MINI.yml +16 -0
  335. data/vendor/board-maps/yaml/AVR_NANO.yml +16 -0
  336. data/vendor/board-maps/yaml/AVR_NANO_EVERY.yml +22 -0
  337. data/vendor/board-maps/yaml/AVR_NG.yml +16 -0
  338. data/vendor/board-maps/yaml/AVR_PRO.yml +16 -0
  339. data/vendor/board-maps/yaml/AVR_ROBOT_CONTROL.yml +22 -0
  340. data/vendor/board-maps/yaml/AVR_ROBOT_MOTOR.yml +19 -0
  341. data/vendor/board-maps/yaml/AVR_UNO.yml +16 -0
  342. data/vendor/board-maps/yaml/AVR_UNO_WIFI_DEV_ED.yml +16 -0
  343. data/vendor/board-maps/yaml/AVR_UNO_WIFI_REV2.yml +22 -0
  344. data/vendor/board-maps/yaml/AVR_YUN.yml +20 -0
  345. data/vendor/board-maps/yaml/AVR_YUNMINI.yml +20 -0
  346. data/vendor/board-maps/yaml/AirM2M_CORE_ESP32C3.yml +14 -0
  347. data/vendor/board-maps/yaml/BEE_DATA_LOGGER.yml +39 -0
  348. data/vendor/board-maps/yaml/BPI_BIT.yml +9 -0
  349. data/vendor/board-maps/yaml/BPI_LEAF_S3.yml +31 -0
  350. data/vendor/board-maps/yaml/BRIDGETEK_IDM2040-7A.yml +48 -0
  351. data/vendor/board-maps/yaml/BeeMotionS3.yml +40 -0
  352. data/vendor/board-maps/yaml/Bee_Motion.yml +27 -0
  353. data/vendor/board-maps/yaml/Bee_Motion_Mini.yml +1 -0
  354. data/vendor/board-maps/yaml/Bee_S3.yml +38 -0
  355. data/vendor/board-maps/yaml/CHALLENGER_2040_LORA_RP2040.yml +39 -0
  356. data/vendor/board-maps/yaml/CHALLENGER_2040_LTE_RP2040.yml +38 -0
  357. data/vendor/board-maps/yaml/CHALLENGER_2040_NFC_RP2040.yml +32 -0
  358. data/vendor/board-maps/yaml/CHALLENGER_2040_SDRTC_RP2040.yml +36 -0
  359. data/vendor/board-maps/yaml/CHALLENGER_2040_SUBGHZ_RP2040.yml +39 -0
  360. data/vendor/board-maps/yaml/CHALLENGER_2040_UWB_RP2040.yml +39 -0
  361. data/vendor/board-maps/yaml/CHALLENGER_2040_WIFI_BLE_RP2040.yml +42 -0
  362. data/vendor/board-maps/yaml/CHALLENGER_2040_WIFI_RP2040.yml +38 -0
  363. data/vendor/board-maps/yaml/CHALLENGER_NB_2040_WIFI_RP2040.yml +38 -0
  364. data/vendor/board-maps/yaml/CRABIK_SLOT_ESP32_S3.yml +19 -0
  365. data/vendor/board-maps/yaml/CYTRON_MAKER_FEATHER_AIOT_S3.yml +26 -0
  366. data/vendor/board-maps/yaml/CYTRON_MAKER_NANO_RP2040.yml +48 -0
  367. data/vendor/board-maps/yaml/CYTRON_MAKER_PI_RP2040.yml +48 -0
  368. data/vendor/board-maps/yaml/CoreESP32.yml +49 -0
  369. data/vendor/board-maps/yaml/D1_MINI32.yml +36 -0
  370. data/vendor/board-maps/yaml/D1_UNO32.yml +28 -0
  371. data/vendor/board-maps/yaml/DATANOISETV_PICOADK.yml +48 -0
  372. data/vendor/board-maps/yaml/DENKY.yml +26 -0
  373. data/vendor/board-maps/yaml/DENKY_PICOV3.yml +26 -0
  374. data/vendor/board-maps/yaml/DENKY_WROOM32.yml +26 -0
  375. data/vendor/board-maps/yaml/DEPARTMENT_OF_ALCHEMY_MINIMAIN_ESP32S2.yml +26 -0
  376. data/vendor/board-maps/yaml/DFROBOT_BEETLE_ESP32_C3.yml +14 -0
  377. data/vendor/board-maps/yaml/DFROBOT_BEETLE_RP2040.yml +48 -0
  378. data/vendor/board-maps/yaml/DFROBOT_FIREBEETLE_2_ESP32E.yml +44 -0
  379. data/vendor/board-maps/yaml/DFROBOT_FIREBEETLE_2_ESP32S3.yml +38 -0
  380. data/vendor/board-maps/yaml/DFROBOT_ROMEO_ESP32S3.yml +7 -0
  381. data/vendor/board-maps/yaml/DPU_ESP32.yml +26 -0
  382. data/vendor/board-maps/yaml/DYDK.yml +38 -0
  383. data/vendor/board-maps/yaml/DYDK1A.yml +37 -0
  384. data/vendor/board-maps/yaml/DYDK1Av2.yml +45 -0
  385. data/vendor/board-maps/yaml/DYG.yml +20 -0
  386. data/vendor/board-maps/yaml/DYM.yml +40 -0
  387. data/vendor/board-maps/yaml/DYMv2.yml +39 -0
  388. data/vendor/board-maps/yaml/D_Duino_32.yml +29 -0
  389. data/vendor/board-maps/yaml/ELECTRONICCATS_HUNTERCAT_NFC.yml +44 -0
  390. data/vendor/board-maps/yaml/ESP320.yml +8 -0
  391. data/vendor/board-maps/yaml/ESP32C3_DEV.yml +14 -0
  392. data/vendor/board-maps/yaml/ESP32C3_M1_I_KIT.yml +13 -0
  393. data/vendor/board-maps/yaml/ESP32S2_DEV.yml +33 -0
  394. data/vendor/board-maps/yaml/ESP32S2_THING_PLUS.yml +34 -0
  395. data/vendor/board-maps/yaml/ESP32S2_USB.yml +33 -0
  396. data/vendor/board-maps/yaml/ESP32S3_CAM_LCD.yml +7 -0
  397. data/vendor/board-maps/yaml/ESP32S3_DEV.yml +38 -0
  398. data/vendor/board-maps/yaml/ESP32_DEV.yml +26 -0
  399. data/vendor/board-maps/yaml/ESP32_DEVKIT_LIPO.yml +26 -0
  400. data/vendor/board-maps/yaml/ESP32_EVB.yml +7 -0
  401. data/vendor/board-maps/yaml/ESP32_GATEWAY.yml +13 -0
  402. data/vendor/board-maps/yaml/ESP32_GATEWAY_C.yml +13 -0
  403. data/vendor/board-maps/yaml/ESP32_GATEWAY_E.yml +13 -0
  404. data/vendor/board-maps/yaml/ESP32_GATEWAY_F.yml +13 -0
  405. data/vendor/board-maps/yaml/ESP32_IOT_REDBOARD.yml +27 -0
  406. data/vendor/board-maps/yaml/ESP32_MICROMOD.yml +24 -0
  407. data/vendor/board-maps/yaml/ESP32_PICO.yml +26 -0
  408. data/vendor/board-maps/yaml/ESP32_POE.yml +7 -0
  409. data/vendor/board-maps/yaml/ESP32_POE_ISO.yml +7 -0
  410. data/vendor/board-maps/yaml/ESP32_S3_BOX.yml +16 -0
  411. data/vendor/board-maps/yaml/ESP32_S3_USB_OTG.yml +11 -0
  412. data/vendor/board-maps/yaml/ESP32_THING.yml +27 -0
  413. data/vendor/board-maps/yaml/ESP32_THING_PLUS.yml +30 -0
  414. data/vendor/board-maps/yaml/ESP32_THING_PLUS_C.yml +30 -0
  415. data/vendor/board-maps/yaml/ESP32_WROOM_DA.yml +26 -0
  416. data/vendor/board-maps/yaml/ESP32_WROVER_KIT.yml +26 -0
  417. data/vendor/board-maps/yaml/ESP8266_ADAFRUIT_HUZZAH.yml +9 -0
  418. data/vendor/board-maps/yaml/ESP8266_AGRUMINO_LEMON_V4.yml +8 -0
  419. data/vendor/board-maps/yaml/ESP8266_ARDUINO_PRIMO.yml +7 -0
  420. data/vendor/board-maps/yaml/ESP8266_ARDUINO_STAR_OTTO.yml +7 -0
  421. data/vendor/board-maps/yaml/ESP8266_ARDUINO_UNOWIFI.yml +9 -0
  422. data/vendor/board-maps/yaml/ESP8266_ESP01.yml +9 -0
  423. data/vendor/board-maps/yaml/ESP8266_ESP07.yml +20 -0
  424. data/vendor/board-maps/yaml/ESP8266_ESP12.yml +20 -0
  425. data/vendor/board-maps/yaml/ESP8266_ESP13.yml +17 -0
  426. data/vendor/board-maps/yaml/ESP8266_ESP210.yml +9 -0
  427. data/vendor/board-maps/yaml/ESP8266_ESPECTRO_CORE.yml +9 -0
  428. data/vendor/board-maps/yaml/ESP8266_ESPINO_ESP12.yml +9 -0
  429. data/vendor/board-maps/yaml/ESP8266_ESPINO_ESP13.yml +9 -0
  430. data/vendor/board-maps/yaml/ESP8266_ESPRESSO_LITE_V1.yml +9 -0
  431. data/vendor/board-maps/yaml/ESP8266_ESPRESSO_LITE_V2.yml +9 -0
  432. data/vendor/board-maps/yaml/ESP8266_GENERIC.yml +9 -0
  433. data/vendor/board-maps/yaml/ESP8266_INVENT_ONE.yml +22 -0
  434. data/vendor/board-maps/yaml/ESP8266_NODEMCU_ESP12.yml +20 -0
  435. data/vendor/board-maps/yaml/ESP8266_NODEMCU_ESP12E.yml +20 -0
  436. data/vendor/board-maps/yaml/ESP8266_OAK.yml +9 -0
  437. data/vendor/board-maps/yaml/ESP8266_PHOENIX_V1.yml +9 -0
  438. data/vendor/board-maps/yaml/ESP8266_PHOENIX_V2.yml +9 -0
  439. data/vendor/board-maps/yaml/ESP8266_SCHIRMILABS_EDUINO_WIFI.yml +25 -0
  440. data/vendor/board-maps/yaml/ESP8266_SONOFF_BASIC.yml +9 -0
  441. data/vendor/board-maps/yaml/ESP8266_SONOFF_S20.yml +9 -0
  442. data/vendor/board-maps/yaml/ESP8266_SONOFF_SV.yml +9 -0
  443. data/vendor/board-maps/yaml/ESP8266_SONOFF_TH.yml +9 -0
  444. data/vendor/board-maps/yaml/ESP8266_THING.yml +9 -0
  445. data/vendor/board-maps/yaml/ESP8266_THING_DEV.yml +9 -0
  446. data/vendor/board-maps/yaml/ESP8266_WEMOS_D1MINI.yml +18 -0
  447. data/vendor/board-maps/yaml/ESP8266_WEMOS_D1MINILITE.yml +18 -0
  448. data/vendor/board-maps/yaml/ESP8266_WEMOS_D1MINIPRO.yml +18 -0
  449. data/vendor/board-maps/yaml/ESP8266_WEMOS_D1R1.yml +25 -0
  450. data/vendor/board-maps/yaml/ESP8266_WEMOS_D1WROOM02.yml +18 -0
  451. data/vendor/board-maps/yaml/ESP8266_WIO_LINK.yml +9 -0
  452. data/vendor/board-maps/yaml/ESP8266_XINABOX_CW01.yml +9 -0
  453. data/vendor/board-maps/yaml/ESPECTRO32.yml +27 -0
  454. data/vendor/board-maps/yaml/ESPea32.yml +27 -0
  455. data/vendor/board-maps/yaml/ESPino32.yml +27 -0
  456. data/vendor/board-maps/yaml/ET-Board.yml +26 -0
  457. data/vendor/board-maps/yaml/EXTREMEELEXTRONICS_RC2040.yml +46 -0
  458. data/vendor/board-maps/yaml/Edgebox-ESP-100.yml +7 -0
  459. data/vendor/board-maps/yaml/FEATHERS2.yml +33 -0
  460. data/vendor/board-maps/yaml/FEATHERS2NEO.yml +30 -0
  461. data/vendor/board-maps/yaml/FEATHERS3.yml +29 -0
  462. data/vendor/board-maps/yaml/FEATHER_ESP32.yml +28 -0
  463. data/vendor/board-maps/yaml/FLYBOARD2040_CORE.yml +48 -0
  464. data/vendor/board-maps/yaml/FRANZININHO_WIFI.yml +33 -0
  465. data/vendor/board-maps/yaml/FRANZININHO_WIFI_MSC.yml +33 -0
  466. data/vendor/board-maps/yaml/FROG_ESP32.yml +26 -0
  467. data/vendor/board-maps/yaml/FUNHOUSE_ESP32S2.yml +22 -0
  468. data/vendor/board-maps/yaml/GEN4_IOD.yml +9 -0
  469. data/vendor/board-maps/yaml/GENERIC_RP2040.yml +48 -0
  470. data/vendor/board-maps/yaml/HEALTHYPI_4.yml +27 -0
  471. data/vendor/board-maps/yaml/HONEYLEMON.yml +27 -0
  472. data/vendor/board-maps/yaml/HORNBILL_ESP32_DEV.yml +27 -0
  473. data/vendor/board-maps/yaml/HORNBILL_ESP32_MINIMA.yml +16 -0
  474. data/vendor/board-maps/yaml/ILABS_2040_RPICO32_RP2040.yml +47 -0
  475. data/vendor/board-maps/yaml/IMBRIOS_LOGSENS_V1P1.yml +19 -0
  476. data/vendor/board-maps/yaml/INTOROBOT_ESP32_DEV.yml +34 -0
  477. data/vendor/board-maps/yaml/LILYGO_T_DISPLAY_S3.yml +26 -0
  478. data/vendor/board-maps/yaml/LOLIN32.yml +27 -0
  479. data/vendor/board-maps/yaml/LOLIN32_LITE.yml +27 -0
  480. data/vendor/board-maps/yaml/LOLIN_C3_MINI.yml +14 -0
  481. data/vendor/board-maps/yaml/LOLIN_D32.yml +27 -0
  482. data/vendor/board-maps/yaml/LOLIN_D32_PRO.yml +27 -0
  483. data/vendor/board-maps/yaml/LOLIN_S2_MINI.yml +34 -0
  484. data/vendor/board-maps/yaml/LOLIN_S2_PICO.yml +34 -0
  485. data/vendor/board-maps/yaml/LOLIN_S3.yml +32 -0
  486. data/vendor/board-maps/yaml/LOLIN_S3_MINI.yml +32 -0
  487. data/vendor/board-maps/yaml/LOLIN_S3_PRO.yml +32 -0
  488. data/vendor/board-maps/yaml/Lion_Bit_Dev_Board.yml +18 -0
  489. data/vendor/board-maps/yaml/LoPy.yml +27 -0
  490. data/vendor/board-maps/yaml/LoPy4.yml +27 -0
  491. data/vendor/board-maps/yaml/M5STACK_CORES3.yml +8 -0
  492. data/vendor/board-maps/yaml/M5STACK_Core2.yml +9 -0
  493. data/vendor/board-maps/yaml/M5STACK_FIRE.yml +10 -0
  494. data/vendor/board-maps/yaml/M5Stack-Timer-CAM.yml +10 -0
  495. data/vendor/board-maps/yaml/M5Stack_ATOM.yml +10 -0
  496. data/vendor/board-maps/yaml/M5Stack_ATOMS3.yml +7 -0
  497. data/vendor/board-maps/yaml/M5Stack_CoreInk.yml +9 -0
  498. data/vendor/board-maps/yaml/M5Stack_Core_ESP32.yml +10 -0
  499. data/vendor/board-maps/yaml/M5Stack_Station.yml +10 -0
  500. data/vendor/board-maps/yaml/M5Stick_C.yml +10 -0
  501. data/vendor/board-maps/yaml/MAGTAG29_ESP32S2.yml +21 -0
  502. data/vendor/board-maps/yaml/MELOPERO_COOKIE_RP2040.yml +48 -0
  503. data/vendor/board-maps/yaml/MELOPERO_SHAKE_RP2040.yml +48 -0
  504. data/vendor/board-maps/yaml/METRO_ESP32S2.yml +34 -0
  505. data/vendor/board-maps/yaml/MGBOT_IOTIK32A.yml +27 -0
  506. data/vendor/board-maps/yaml/MGBOT_IOTIK32B.yml +27 -0
  507. data/vendor/board-maps/yaml/MH_ET_LIVE_ESP32DEVKIT.yml +27 -0
  508. data/vendor/board-maps/yaml/MH_ET_LIVE_ESP32MINIKIT.yml +27 -0
  509. data/vendor/board-maps/yaml/MICROS2.yml +34 -0
  510. data/vendor/board-maps/yaml/MOD_WIFI_ESP8266.yml +9 -0
  511. data/vendor/board-maps/yaml/Metro.yml +8 -0
  512. data/vendor/board-maps/yaml/NANO32.yml +27 -0
  513. data/vendor/board-maps/yaml/NANO_RP2040_CONNECT.yml +35 -0
  514. data/vendor/board-maps/yaml/NEBULAS3.yml +33 -0
  515. data/vendor/board-maps/yaml/NEKOSYSTEMS_BL2040_MINI.yml +48 -0
  516. data/vendor/board-maps/yaml/NULLBITS_BIT_C_PRO.yml +48 -0
  517. data/vendor/board-maps/yaml/Node32s.yml +27 -0
  518. data/vendor/board-maps/yaml/NodeMCU_32S.yml +27 -0
  519. data/vendor/board-maps/yaml/ODROID_ESP32.yml +10 -0
  520. data/vendor/board-maps/yaml/ONEHORSE_ESP32_DEV.yml +24 -0
  521. data/vendor/board-maps/yaml/OROCA_EDUBOT.yml +33 -0
  522. data/vendor/board-maps/yaml/PIMORONI_PGA2040.yml +48 -0
  523. data/vendor/board-maps/yaml/PROS3.yml +28 -0
  524. data/vendor/board-maps/yaml/PYCOM_GPY.yml +27 -0
  525. data/vendor/board-maps/yaml/Piranha.yml +16 -0
  526. data/vendor/board-maps/yaml/Pocket32.yml +27 -0
  527. data/vendor/board-maps/yaml/QUANTUM.yml +26 -0
  528. data/vendor/board-maps/yaml/RASPBERRY_PI_PICO.yml +48 -0
  529. data/vendor/board-maps/yaml/RASPBERRY_PI_PICO_W.yml +48 -0
  530. data/vendor/board-maps/yaml/REDPILL_ESP32S3.yml +32 -0
  531. data/vendor/board-maps/yaml/RMP.yml +33 -0
  532. data/vendor/board-maps/yaml/SAMD_CIRCUITPLAYGROUND_EXPRESS.yml +12 -0
  533. data/vendor/board-maps/yaml/SAMD_MKR1000.yml +20 -0
  534. data/vendor/board-maps/yaml/SAMD_MKRFox1200.yml +19 -0
  535. data/vendor/board-maps/yaml/SAMD_MKRGSM1400.yml +15 -0
  536. data/vendor/board-maps/yaml/SAMD_MKRNB1500.yml +15 -0
  537. data/vendor/board-maps/yaml/SAMD_MKRVIDOR4000.yml +19 -0
  538. data/vendor/board-maps/yaml/SAMD_MKRWAN1300.yml +18 -0
  539. data/vendor/board-maps/yaml/SAMD_MKRWAN1310.yml +18 -0
  540. data/vendor/board-maps/yaml/SAMD_MKRWIFI1010.yml +19 -0
  541. data/vendor/board-maps/yaml/SAMD_MKRZERO.yml +19 -0
  542. data/vendor/board-maps/yaml/SAMD_NANO_33_IOT.yml +13 -0
  543. data/vendor/board-maps/yaml/SAMD_TIAN.yml +15 -0
  544. data/vendor/board-maps/yaml/SAMD_ZERO.yml +14 -0
  545. data/vendor/board-maps/yaml/SAM_DUE.yml +26 -0
  546. data/vendor/board-maps/yaml/SAM_ZERO.yml +15 -0
  547. data/vendor/board-maps/yaml/SEEED_INDICATOR_RP2040.yml +47 -0
  548. data/vendor/board-maps/yaml/SEEED_XIAO_RP2040.yml +29 -0
  549. data/vendor/board-maps/yaml/SOLDERPARTY_RP2040_STAMP.yml +48 -0
  550. data/vendor/board-maps/yaml/SONOFF_DUALR3.yml +26 -0
  551. data/vendor/board-maps/yaml/SPARKFUN_PROMICRO_RP2040.yml +48 -0
  552. data/vendor/board-maps/yaml/SPARKFUN_THINGPLUS_RP2040.yml +48 -0
  553. data/vendor/board-maps/yaml/STAMP_S3.yml +4 -0
  554. data/vendor/board-maps/yaml/TAMC_TERMOD_S3.yml +31 -0
  555. data/vendor/board-maps/yaml/TBEAM_USE_RADIO_SX1262.yml +23 -0
  556. data/vendor/board-maps/yaml/TBEAM_USE_RADIO_SX1268.yml +23 -0
  557. data/vendor/board-maps/yaml/TBEAM_USE_RADIO_SX1276.yml +23 -0
  558. data/vendor/board-maps/yaml/TBEAM_USE_RADIO_SX1278.yml +23 -0
  559. data/vendor/board-maps/yaml/TBEAM_USE_RADIO_SX1280.yml +23 -0
  560. data/vendor/board-maps/yaml/TBeam.yml +23 -0
  561. data/vendor/board-maps/yaml/TINYPICO.yml +26 -0
  562. data/vendor/board-maps/yaml/TINYS2.yml +33 -0
  563. data/vendor/board-maps/yaml/TINYS3.yml +25 -0
  564. data/vendor/board-maps/yaml/TTGO-T-OI-PLUS_DEV.yml +11 -0
  565. data/vendor/board-maps/yaml/TTGO_LoRa32_V1.yml +28 -0
  566. data/vendor/board-maps/yaml/TTGO_LoRa32_V2.yml +28 -0
  567. data/vendor/board-maps/yaml/TTGO_LoRa32_v21new.yml +28 -0
  568. data/vendor/board-maps/yaml/TTGO_T1.yml +27 -0
  569. data/vendor/board-maps/yaml/TTGO_T7_V13_Mini32.yml +27 -0
  570. data/vendor/board-maps/yaml/TTGO_T7_V14_Mini32.yml +27 -0
  571. data/vendor/board-maps/yaml/TWATCH_2020_V1.yml +10 -0
  572. data/vendor/board-maps/yaml/TWATCH_2020_V2.yml +10 -0
  573. data/vendor/board-maps/yaml/TWATCH_2020_V3.yml +10 -0
  574. data/vendor/board-maps/yaml/TWATCH_BASE.yml +10 -0
  575. data/vendor/board-maps/yaml/TWatch.yml +10 -0
  576. data/vendor/board-maps/yaml/Trueverit_ESP32_Universal_IoT_Driver.yml +18 -0
  577. data/vendor/board-maps/yaml/Trueverit_ESP32_Universal_IoT_Driver_MK_II.yml +18 -0
  578. data/vendor/board-maps/yaml/UBLOX_NINA_W10.yml +48 -0
  579. data/vendor/board-maps/yaml/UBLOX_NORA_W10.yml +43 -0
  580. data/vendor/board-maps/yaml/UPESY_RP2040_DEVKIT.yml +48 -0
  581. data/vendor/board-maps/yaml/VALTRACK_V4_MFW_ESP32_C3.yml +23 -0
  582. data/vendor/board-maps/yaml/VALTRACK_V4_VTS_ESP32_C3.yml +23 -0
  583. data/vendor/board-maps/yaml/VIYALAB_MIZU_RP2040.yml +48 -0
  584. data/vendor/board-maps/yaml/WATCHY.yml +7 -0
  585. data/vendor/board-maps/yaml/WATCHY_V10.yml +7 -0
  586. data/vendor/board-maps/yaml/WATCHY_V15.yml +7 -0
  587. data/vendor/board-maps/yaml/WATCHY_V20.yml +7 -0
  588. data/vendor/board-maps/yaml/WAVESHARE_RP2040_LCD_0_96.yml +47 -0
  589. data/vendor/board-maps/yaml/WAVESHARE_RP2040_LCD_1_28.yml +47 -0
  590. data/vendor/board-maps/yaml/WAVESHARE_RP2040_ONE.yml +47 -0
  591. data/vendor/board-maps/yaml/WAVESHARE_RP2040_PLUS.yml +48 -0
  592. data/vendor/board-maps/yaml/WAVESHARE_RP2040_ZERO.yml +47 -0
  593. data/vendor/board-maps/yaml/WESP32.yml +17 -0
  594. data/vendor/board-maps/yaml/WIDORA_AIR.yml +34 -0
  595. data/vendor/board-maps/yaml/WIFIDUINO_ESP8266.yml +23 -0
  596. data/vendor/board-maps/yaml/WIFINFO.yml +20 -0
  597. data/vendor/board-maps/yaml/WIPY3.yml +27 -0
  598. data/vendor/board-maps/yaml/WIZNET_5100S_EVB_PICO.yml +48 -0
  599. data/vendor/board-maps/yaml/WIZNET_5500_EVB_PICO.yml +48 -0
  600. data/vendor/board-maps/yaml/WIZNET_WIZFI360_EVB_PICO.yml +48 -0
  601. data/vendor/board-maps/yaml/WT32_ETH01.yml +8 -0
  602. data/vendor/board-maps/yaml/WiFiduino32S3.yml +27 -0
  603. data/vendor/board-maps/yaml/WiFiduinoV2.yml +27 -0
  604. data/vendor/board-maps/yaml/Wifiduino32.yml +40 -0
  605. data/vendor/board-maps/yaml/XIAO_ESP32C3.yml +22 -0
  606. data/vendor/board-maps/yaml/XIAO_ESP32S3.yml +36 -0
  607. data/vendor/board-maps/yaml/YD_RP2040.yml +48 -0
  608. data/vendor/board-maps/yaml/atmegazero_esp32s2.yml +30 -0
  609. data/vendor/board-maps/yaml/connaxio_espoir.yml +18 -0
  610. data/vendor/board-maps/yaml/esp32vn_iot_uno.yml +22 -0
  611. data/vendor/board-maps/yaml/fm_devkit.yml +15 -0
  612. data/vendor/board-maps/yaml/heltec_wifi_32_lora_V3.yml +31 -0
  613. data/vendor/board-maps/yaml/heltec_wifi_kit_32.yml +28 -0
  614. data/vendor/board-maps/yaml/heltec_wifi_kit_32_V3.yml +32 -0
  615. data/vendor/board-maps/yaml/heltec_wifi_lora_32.yml +27 -0
  616. data/vendor/board-maps/yaml/heltec_wifi_lora_32_V2.yml +27 -0
  617. data/vendor/board-maps/yaml/heltec_wireless_stick.yml +27 -0
  618. data/vendor/board-maps/yaml/heltec_wireless_stick_LITE.yml +27 -0
  619. data/vendor/board-maps/yaml/openkb.yml +27 -0
  620. data/vendor/board-maps/yaml/roboheart_hercules.yml +17 -0
  621. data/vendor/board-maps/yaml/sensesiot_weizen.yml +26 -0
  622. data/vendor/board-maps/yaml/uPesy_WROOM.yml +27 -0
  623. data/vendor/board-maps/yaml/uPesy_WROVER.yml +27 -0
  624. data/vendor/board-maps/yaml/unphone8.yml +32 -0
  625. data/vendor/board-maps/yaml/unphone9.yml +32 -0
  626. data/vendor/board-maps/yaml/wifi_kit_8.yml +15 -0
  627. metadata +800 -0
@@ -0,0 +1,16 @@
1
+ #
2
+ # This is an example of how to use the servo class
3
+ #
4
+ require 'bundler/setup'
5
+ require 'denko'
6
+
7
+ board = Denko::Board.new(Denko::Connection::Serial.new)
8
+ servo = Denko::Motor::Servo.new(pin: 9, board: board)
9
+
10
+ # Add different angles (in degrees) to the array below to try out your servo.
11
+ # Note: Some servos may not have a full 180 degree sweep.
12
+
13
+ [0, 90].cycle do |angle|
14
+ servo.position = angle
15
+ sleep 0.5
16
+ end
Binary file
@@ -0,0 +1,43 @@
1
+ #
2
+ # Example driving a stepper motor with the EasyDriver board: https://www.sparkfun.com/products/10267?
3
+ #
4
+ require 'bundler/setup'
5
+ require 'denko'
6
+
7
+ board = Denko::Board.new(Denko::Connection::Serial.new)
8
+ stepper = Denko::Motor::Stepper.new board: board,
9
+ pins: { slp: 6, enable: 7, direction: 8, step: 10, ms1: 11, ms2: 12 }
10
+
11
+ # Default is 8 microsteps. Set to 2 so we can move faster.
12
+ stepper.microsteps = 2
13
+
14
+ # 400 steps is now 1 revolution for a 200 step motor.
15
+ 400.times do
16
+ stepper.step_cc
17
+ sleep 0.002
18
+ end
19
+
20
+ # Sleep the driver chip and wait a while.
21
+ stepper.sleep
22
+ sleep 1
23
+
24
+ # Wake it up and set to full steps.
25
+ stepper.wake
26
+ stepper.microsteps = 1
27
+
28
+ #
29
+ # Now 200 steps the other way will move us back to the start.
30
+ # Note the longer sleep here since the steps are bigger.
31
+ # Adjust both sleep vales to suit your motor.
32
+ #
33
+ 200.times do
34
+ stepper.step_cw
35
+ sleep 0.006
36
+ end
37
+
38
+ # Sleep the driver once we're done.
39
+ stepper.sleep
40
+
41
+ # We write to the board asynchronously.
42
+ # Make sure we send all step commands before exit.
43
+ board.finish_write
@@ -0,0 +1,30 @@
1
+ #
2
+ # Example of playing a melody on a piezoelectric buzzer.
3
+ #
4
+ require 'bundler/setup'
5
+ require 'denko'
6
+
7
+ board = Denko::Board.new(Denko::Connection::Serial.new)
8
+ buzzer = Denko::PulseIO::Buzzer.new(board: board, pin: 9)
9
+
10
+ C4 = 262
11
+ D4 = 294
12
+ E4 = 330
13
+
14
+ notes = [
15
+ [E4, 1], [D4, 1], [C4, 1], [D4, 1], [E4, 1], [E4, 1], [E4, 2],
16
+ [D4, 1], [D4, 1], [D4, 2], [E4, 1], [E4, 1], [E4, 2],
17
+ [E4, 1], [D4, 1], [C4, 1], [D4, 1], [E4, 1], [E4, 1], [E4, 1], [E4, 1],
18
+ [D4, 1], [D4, 1], [E4, 1], [D4, 1], [C4, 4],
19
+ ]
20
+
21
+ bpm = 240
22
+ beat_time = 60.to_f / bpm
23
+
24
+ notes.each do |note|
25
+ buzzer.tone(note[0])
26
+ sleep note[1] * beat_time
27
+ end
28
+
29
+ buzzer.stop
30
+ board.finish_write
@@ -0,0 +1,55 @@
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
@@ -0,0 +1,48 @@
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
@@ -0,0 +1,15 @@
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
+ aht10 = Denko::Sensor::AHT10.new(bus: bus)
10
+
11
+ aht10.poll(2) do |reading|
12
+ puts "Polled Reading: #{reading[:temperature].round(3)} \xC2\xB0C | #{reading[:humidity].round(3)} % RH"
13
+ end
14
+
15
+ sleep
@@ -0,0 +1,15 @@
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: :SDA0)
9
+ aht20 = Denko::Sensor::AHT20.new(bus: bus)
10
+
11
+ aht20.poll(2) do |reading|
12
+ puts "Polled Reading: #{reading[:temperature].round(3)} \xC2\xB0C | #{reading[:humidity].round(3)} % RH"
13
+ end
14
+
15
+ sleep
@@ -0,0 +1,75 @@
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
+
9
+ #
10
+ # Default pins for the I2C0 (first) interface on most chips:
11
+ #
12
+ # ATmega 328p: SDA = 'A4' SCL = 'A5' - Arduino Uno, Nano
13
+ # ATmega 32u4: SDA = 2 SCL = 3 - Arduino Leonardo, Pro Micro
14
+ # ATmega1280 / 2560: SDA = 20 SCL = 21 - Arduino Mega
15
+ # SAM3X8E: SDA = 20 SCL = 21 - Arduino Due
16
+ # SAMD21G18: SDA = 20 SCL = 21 - Arduino Zero, M0, M0 Pro
17
+ # ESP8266: SDA = 4 SCL = 5
18
+ # ESP32: SDA = 21 SCL = 22
19
+ # RP2040: SDA = 4 SCL = 5 - Raspberry Pi Pico (W)
20
+ #
21
+ # Only give the SDA pin of the I2C bus. SCL (clock) pin must be
22
+ # connected for it to work, but we don't need to control it.
23
+ #
24
+ bus = Denko::I2C::Bus.new(board: board, pin: :SDA)
25
+
26
+ sensor = Denko::Sensor::BME280.new(bus: bus, address: 0x76)
27
+
28
+ # Use A BMP280 with no humidity instead.
29
+ # sensor = Denko::Sensor::BMP280.new(bus: bus, address: 0x76)
30
+
31
+ # Default reading mode is oneshot ("forced" in datasheet).
32
+ # sensor.oneshot_mode
33
+
34
+ # Enable oversampling independently on each sensor.
35
+ # sensor.temperature_samples = 8
36
+ # sensor.pressure_samples = 2
37
+ # sensor.humidity_samples = 4
38
+
39
+ # Enable continuous reading mode ("normal" in datasheet), with standby time and IIR filter.
40
+ # sensor.continuous_mode
41
+ # sensor.standby_time = 62.5
42
+ # sensor.iir_coefficient = 4
43
+
44
+ # Print raw config register bits.
45
+ # print sensor.config_register_bits
46
+
47
+ def display_reading(reading)
48
+ # Time
49
+ print "#{Time.now.strftime '%Y-%m-%d %H:%M:%S'} - "
50
+
51
+ # Temperature
52
+ formatted_temp = reading[:temperature].round(2).to_s.ljust(5, '0')
53
+ print "Temperature: #{formatted_temp} \xC2\xB0C"
54
+
55
+ # Pressure
56
+ if reading[:pressure]
57
+ formatted_pressure = (reading[:pressure] / 101325).round(5).to_s.ljust(7, '0')
58
+ print " | Pressure #{formatted_pressure} atm"
59
+ end
60
+
61
+ # Humidity
62
+ if reading[:humidity]
63
+ formatted_humidity = reading[:humidity].round(2).to_s.ljust(5, '0')
64
+ print " | Humidity #{formatted_humidity} %"
65
+ end
66
+
67
+ puts
68
+ end
69
+
70
+ # Poll the sensor and print readings.
71
+ sensor.poll(5) do |reading|
72
+ display_reading(reading)
73
+ end
74
+
75
+ sleep
@@ -0,0 +1,24 @@
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
@@ -0,0 +1,58 @@
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
@@ -0,0 +1,54 @@
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)
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
@@ -0,0 +1,31 @@
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
+ htu31d = Denko::Sensor::HTU31D.new(bus: bus)
10
+
11
+ # Get and set heater state.
12
+ htu31d.heater_on
13
+ puts "Heater on: #{htu31d.heater_on?}"
14
+ htu31d.heater_off
15
+ puts "Heater off: #{htu31d.heater_off?}"
16
+
17
+ # Back to default settings, including heater off, unlike HTU21D.
18
+ htu31d.reset
19
+ puts "Resetting HTU31D... Heater off: #{htu31d.heater_off?}"
20
+ puts
21
+
22
+ # Resolution goes from 0..3 separately for temperature and humidity. See datasheet.
23
+ htu31d.temperature_resolution = 3
24
+ htu31d.humidity_resolution = 3
25
+
26
+ # Unlike HTU21D, HTU31D works as a regular polled sensor.
27
+ htu31d.poll(2) do |reading|
28
+ puts "Polled Reading: #{reading[:temperature].round(3)} \xC2\xB0C | #{reading[:humidity].round(3)} % RH"
29
+ end
30
+
31
+ sleep
@@ -0,0 +1,50 @@
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
@@ -0,0 +1,49 @@
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
@@ -0,0 +1,40 @@
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) }
@@ -0,0 +1,46 @@
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
@@ -0,0 +1,16 @@
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