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,5 +0,0 @@
1
- {
2
- "C_Cpp.dimInactiveRegions": false,
3
- "cmake.configureOnOpen": false,
4
- "C_Cpp.errorSquiggles": "disabled"
5
- }
data/.vscode/tasks.json DELETED
@@ -1,20 +0,0 @@
1
- {
2
- // See https://go.microsoft.com/fwlink/?LinkId=733558
3
- // for the documentation about the tasks.json format
4
- "version": "2.0.0",
5
- "tasks": [
6
- {
7
- "label": "Upload",
8
- "type": "shell",
9
- "command": "./build",
10
- "group": "build"
11
- }
12
-
13
- {
14
- "label": "MiniTest",
15
- "type": "shell",
16
- "command": "rake",
17
- "group": "test"
18
- }
19
- ]
20
- }
data/HARDWARE.md DELETED
@@ -1,264 +0,0 @@
1
- # Microcontrollers
2
-
3
- :green_heart: Full support :yellow_heart: Partial support :heart: Planned. No support yet :question: Works in theory. Untested in real hardware.
4
-
5
- ### AVR/MegaAVR Based Arduino Products (and Clones)
6
- [![AVR Build Status](https://github.com/denko-rb/denko/actions/workflows/build_avr.yml/badge.svg)](https://github.com/denko-rb/denko/actions/workflows/build_avr.yml)
7
- [![MegaAVR Build Status](https://github.com/denko-rb/denko/actions/workflows/build_megaavr.yml/badge.svg)](https://github.com/denko-rb/denko/actions/workflows/build_megaavr.yml)
8
-
9
- | Chip | Status | Products | Notes |
10
- | :-------- | :------: | :--------------- |------ |
11
- | ATmega168 | :green_heart: | Duemilanove, Diecimila, Pro | Omits features. `denko targets` for info.
12
- | ATmega328 | :green_heart: | Uno R3, Uno WiFi, Nano, Fio, Pro |
13
- | ATmega32u4 | :green_heart: | Leonardo, Micro, Leonardo ETH, Esplora, LilyPad USB |
14
- | ATmega1280 | :green_heart: | Mega |
15
- | ATmega2560 | :green_heart: | Mega2560, Arduino Mega ADK |
16
- | ATmega4809 | :green_heart: | Nano Every, Uno WiFi Rev2 |
17
-
18
- **Note:** Only USB boards listed. Any board with a supported chip should work, once you can flash it and connect to serial.
19
-
20
- ### ARM Based Arduino Products (and Clones)
21
- [![SAM3X Build Satus](https://github.com/denko-rb/denko/actions/workflows/build_sam3x.yml/badge.svg)](https://github.com/denko-rb/denko/actions/workflows/build_sam3x.yml)
22
- [![SAMD Build Satus](https://github.com/denko-rb/denko/actions/workflows/build_samd.yml/badge.svg)](https://github.com/denko-rb/denko/actions/workflows/build_samd.yml)
23
- [![RA4M1 Build Satus](https://github.com/denko-rb/denko/actions/workflows/build_ra4m1.yml/badge.svg)](https://github.com/denko-rb/denko/actions/workflows/build_ra4m1.yml)
24
-
25
- | Chip | Status | Products | Notes |
26
- | :-------- | :------: | :--------------- |------ |
27
- | ATSAM3X8E | :yellow_heart: | Due | Uses Native USB. Tone and IR Out don't work.
28
- | ATSAMD21 | :green_heart: | Zero, M0 Series, Nano 33 IOT, MKR WiFi 1010 | Native USB
29
- | RA4M1 | :yellow_heart: | Uno R4 Minima, Uno R4 WiFi | IR and WS2812 libraries don't support this yet
30
-
31
- ### Arduino Networking
32
-
33
- | Chip | Status | Products | Notes |
34
- | :-------- | :------: | :--------------- |------ |
35
- | Wiznet W5100/5500 | :green_heart: | Ethernet Shield | Wired Ethernet for Uno/Mega pin-compatibles
36
- | HDG204 + AT32UC3 | :question: | WiFi Shield | Compiles, but no hardware
37
- | ATWINC1500 | :green_heart: | MKR1000, WiFi Shield 101 | #define WIFI_101 for shield. Automatic for MKR1000
38
- | u-blox NINA-W102 | :question: | Uno WiFi Rev 2, MKR WiFi 1010, Nano 33 IOT | Should work. No hardware
39
-
40
- ### AVR Chips from [MightyCore](https://github.com/MCUdude/MightyCore)
41
-
42
- | Chip | Status | Products | Notes |
43
- | :-------- | :------: | :--------------- |------ |
44
- | ATmega1284 | :heart: | Used in many 8-bit 3D printer boards. |
45
-
46
- ### Espressif Chips with Built-In Wi-Fi
47
- [![ESP8266 Build Status](https://github.com/denko-rb/denko/actions/workflows/build_esp8266.yml/badge.svg)](https://github.com/denko-rb/denko/actions/workflows/build_esp8266.yml)
48
- [![ESP32 Build Status](https://github.com/denko-rb/denko/actions/workflows/build_esp32.yml/badge.svg)](https://github.com/denko-rb/denko/actions/workflows/build_esp32.yml)
49
-
50
- | Chip | Status | Board Tested | Notes |
51
- | :-------- | :------: | :--------------- |------ |
52
- | ESP8266 | :green_heart: | NodeMCU |
53
- | ESP8285 | :question: | DOIT ESP-Mx DevKit | Should be identical to 8266. Not tested in hardware.
54
- | ESP32 | :green_heart: | DOIT ESP32 DevKit V1 |
55
- | ESP32-S2 | :green_heart: | LOLIN S2 Pico | Native USB
56
- | ESP32-S3 | :green_heart: | LOLIN S3 V1.0.0 | Native USB
57
- | ESP32-C3 | :green_heart: | LOLIN C3 Mini V2.1.0 | Native USB
58
- | ESP32-H2 | :heart: | - | Support in Arduino ESP32 core beta
59
- | ESP32-C6 | :heart: | - | Support in Arduino ESP32 core beta
60
-
61
- **Note:** For ESP32 chips using native USB, make sure `USB CDC On Boot` is `Enabled` in the IDE's `Tools` menu. Flashing from the CLI doesn't automatically enable this, so the IDE is recommended for now.
62
-
63
- ### Raspberry Pi Microcontrollers
64
- [![RP2040 Build Status](https://github.com/denko-rb/denko/actions/workflows/build_rp2040.yml/badge.svg)](https://github.com/denko-rb/denko/actions/workflows/build_rp2040.yml)
65
-
66
- | Chip | Status | Board Tested | Notes |
67
- | :-------- | :------: | :--------------- |------ |
68
- | RP2040 | :green_heart: | Raspberry Pi Pico (W) | WiFi only on W version. No WS1812 LED support.
69
-
70
- # Single Board Computers
71
-
72
- ### Raspberry Pi Single Board Computers
73
- **Note:** See the [denko-piboard](https://github.com/denko-rb/denko-piboard) extension to this gem. It uses the peripheral classes from this gem, but swaps out `Board` for `PiBoard`, which uses the Raspberry Pi's built-in GPIO interface. This is still a work-in-progress.
74
-
75
- | Chip | Status | Products | Notes |
76
- | :-------- | :------: | :--------------- |------ |
77
- | BCM2835 | :yellow_heart: | Pi 1, Pi Zero (W) |
78
- | BCM2836/7 | :question: | Pi 2 |
79
- | BCM2837A0/B0 | :yellow_heart: | Pi 3 |
80
- | BCM2711 | :question: | Pi 4, Pi 400 |
81
- | BCM2710A1 | :question: | Pi Zero 2W |
82
-
83
- # Peripherals
84
-
85
- :green_heart: Full support :yellow_heart: Partial support :heart: Planned. No support yet
86
-
87
- ### Interfaces
88
-
89
- | Name | Status | HW/SW | Component Class | Notes |
90
- | :--------------- | :------: | :--- | :-------------- | :---- |
91
- | Digital In | :green_heart: | H | `DigitalIO::Input` | 1ms - 128ms (4ms default) listen, poll, or read
92
- | Analog In (ADC) | :green_heart: | H | `AnalogIO::Input` | 1ms - 128ms (16ms default) listen, poll, or read
93
- | Digital Out | :green_heart: | H | `DigitalIO::Output` |
94
- | Analog Out (DAC) | :green_heart: | H | `AnalogIO::Output` | Only SAM3X, SAMD21, RA4M1, ESP32, ESP32-S2
95
- | PWM Out | :green_heart: | H | `PulseIO::PWMOutput` |
96
- | Servo/ESC PWM | :green_heart: | H | See Motor table | Uses PWM
97
- | Tone Out (Square Wave)| :green_heart: | H | `PulseIO::Buzzer` | Except SAM3X. Uses PWM
98
- | I2C | :green_heart: | H | `I2C::Bus` | Predetermined pins from IDE
99
- | I2C Bit Bang | :heart: | S | `I2C::BitBang` | Any pins
100
- | SPI | :green_heart: | H | `SPI::Bus` | Predetermined pins from IDE
101
- | SPI Bit Bang | :green_heart: | S | `SPI::BitBang` | Any pins
102
- | UART | :green_heart: | H | `UART::Hardware` | Except Atmega328, ATmega168
103
- | UART Bit Bang | :green_heart: | S | `UART::BitBang` | Only ATmega328, ATmega168
104
- | Maxim OneWire | :green_heart: | S | `OneWire::Bus` | No overdrive
105
- | Infrared Emitter | :green_heart: | S | `PulseIO::IRTransmitter` | Except SAM3X, RA4M1
106
- | Infrared Receiver | :heart: | S | `PulseIO::IRReceiver` | Doable with existing library
107
- | WS2812 | :green_heart: | S | See LED table | Except RP2040, RA4M1
108
- | ESP32-PCNT | :heart: | H | - | Only ESP32. Pulse counter (for encoders)
109
- | ESP32-MCPWM | :heart: | H | - | Only ESP32. Motor control PWM
110
-
111
- **Note:** When listening, the board checks the pin's value every **_2^n_** milliseconds (**_n_** from **_0_** to **_7_**), without further commands.
112
- Polling and reading follow a call and response pattern.
113
-
114
- ### Basic Input/Output
115
-
116
- | Name | Status | Interface | Component Class | Notes |
117
- | :--------------- | :------: | :-------- | :--------------- |------ |
118
- | Button | :green_heart: | Digital In | `DigitalIO::Button` |
119
- | Rotary Encoder | :green_heart: | Digital In | `DigitalIO::RotaryEncoder` | Listens every 1ms
120
- | Potentiometer | :green_heart: | Analog In | `AnalogIO::Potentiometer` | Smoothing on by default
121
- | Relay | :green_heart: | Digital Out | `DigitalIO::Relay` |
122
-
123
- ### LEDs
124
-
125
- | Name | Status | Interface | Component Class | Notes |
126
- | :--------------- | :------: | :-------- | :--------------- |------ |
127
- | LED | :green_heart: | Digi/Ana Out | `LED::Base` |
128
- | RGB LED | :green_heart: | Digi/Ana Out | `LED::RGB` |
129
- | 7 Segment Display | :yellow_heart: | Digital Out | `LED::SevenSegment` | No decimal point
130
- | 8x8 LED (MAX7219) | :heart: | SPI | `LED::MAX7219` |
131
- | TM1637 | :heart: | BitBang SPI | `LED::TM1637` | 4x 7 Segment + Colon
132
- | Neopixel / WS2812B | :yellow_heart: | Adafruit Library | `LED::WS2812` | Not working on RP2040
133
- | Dotstar / APA102 | :green_heart: | SPI | `LED::APA102` |
134
-
135
- ### Displays
136
-
137
- | Name | Status | Interface | Component Class | Notes |
138
- | :--------------- | :------: | :-------- | :--------------- |------ |
139
- | HD44780 LCD | :green_heart: | Digital Out, Output Register | `Display::HD44780` |
140
- | SSD1306 OLED | :yellow_heart: | I2C | `Display::SSD1306` | 1 font, some graphics
141
- | ST7565R (128x64 Mono) | :heart: | SPI | `Display::ST7565R` |
142
- | ST7735S (160x128 RGB) | :heart: | SPI | `Display::ST7735S` |
143
- | ILI9341 (240x320 RGB) | :heart: | SPI | `Display::ILI9341` |
144
- | GC9107 (128x128 RGB) | :heart: | SPI | `Display::GC9107` |
145
- | GC9A01 (240x240 Round) | :heart: | SPI | `Display::GCA9A01` |
146
- | IL0373 (212x104 E-Paper) | :heart: | SPI | `Display::IL0373` |
147
-
148
- ### Sound
149
-
150
- | Name | Status | Interface | Component Class | Notes |
151
- | :--------------- | :------: | :-------- | :--------------- |------ |
152
- | Piezo Buzzer | :green_heart: | Tone Out | `PulseIO::Buzzer` | Frequency > 30Hz
153
-
154
- ### Motors / Motor Drivers
155
-
156
- | Name | Status | Interface | Component Class | Notes |
157
- | :--------------- | :------: | :-------- | :--------------- |------ |
158
- | Generic Hobby Servo | :green_heart: | Servo/ESC PWM | `Motor::Servo` | Max depends on PWM channel count
159
- | Generic ESC | :yellow_heart: | Servo/ESC PWM | `Motor::Servo` | Works. Needs its own class.
160
- | PCA9685 | :heart: | I2C | `PulseIO::PCA9685` | 16-ch, 12-bit PWM for servo or LED
161
- | L298N | :green_heart: | Digi + PWM Out | `Motor::L298` | H-Bridge DC motor driver
162
- | DRV8833 | :heart: | Digi + PWM Out | `Motor::DRV8833` | H-Bridge DC motor driver
163
- | TB6612 | :heart: | Digi + PWM Out | `Motor::TB6612` | H-Bridge DC motor driver
164
- | A3967 | :green_heart: | Digital Out | `Motor::Stepper` | 1-ch microstepper (EasyDriver)
165
- | A4988 | :yellow_heart: | DigitalOut | `Motor::Stepper` | 1-ch microstepper
166
- | TMC2209 | :heart: | - | - | 1-ch silent stepper driver
167
-
168
- ### I/O Expansion
169
-
170
- | Name | Status | Interface | Component Class | Notes |
171
- | :--------------- | :------: | :-------- | :--------------- |------ |
172
- | Input Register | :green_heart: | SPI | `SPI::InputRegister` | Tested on CD4021B
173
- | Output Register | :green_heart: | SPI | `SPI::OutputRegister`| Tested on 74HC595
174
- | PCF8574 Expander | :heart: | I2C | `DigitalIO::PCF8574` | 8-ch bi-directional digital I/O
175
- | ADS1100 ADC | :heart: | I2C | `AnalogIO::ADS1100` | 1-ch, 16-bit ADC
176
- | ADS1115 ADC | :green_heart: | I2C | `AnalogIO::ADS1115` | 4-ch, 16-bit ADC. Comparator not implemented.
177
- | ADS1118 ADC | :green_heart: | SPI | `AnalogIO::ADS1118` | 4-ch, 16-bit ADC + temperature
178
- | ADS1232 ADC | :heart: | SPI | `AnalogIO::ADS1232` | 2-ch, 24-bit ADC + temperature
179
- | PCF8591 ADC/DAC | :heart: | I2C | `AnalogIO::PCF8591` | 4-ch, 8-bit ADC + 1-chm 8-bit DAC
180
- | MCP4725 DAC | :heart: | I2C | `AnalogIO::MCP4275` | 1-ch, 12-bit DAC
181
- | PCA9548 I2C Mux | :heart: | I2C | `I2C::PCA9548` | 8-way I2C multiplexer
182
-
183
- ### Environmental Sensors
184
-
185
- | Name | Status | Interface | Component Class | Type | Notes |
186
- | :--------------- | :------: | :-------- | :--------------- |--------------- | ---------------------- |
187
- | MAX31850 | :heart: | OneWire | `Sensor::MAX31850` | Thermocouple |
188
- | MAX6675 | :heart: | SPI | `Sensor::MAX6675` | Thermocouple |
189
- | DS18B20 | :green_heart: | OneWire | `Sensor::DS18B20` | Temp |
190
- | DHT11/21/22 | :green_heart: | Digi In/Out | `Sensor::DHT` | Temp / RH |
191
- | SHT30/31/35 | :green_heart: | I2C | `Sensor::SHT3X` | Temp / RH | M5Stack ENV III, one-shot only
192
- | SHT40/41 | :heart: | I2C | `Sensor::SHT4X` | Temp / RH |
193
- | QMP6988 | :green_heart: | I2C | `Sensor::QMP6988` | Temp / Press | M5Stack ENV III
194
- | BMP180 | :green_heart: | I2C | `Sensor::BMP180` | Temp / Press |
195
- | BMP280 | :green_heart: | I2C | `Sensor::BMP280` | Temp / Press |
196
- | BME280 | :green_heart: | I2C | `Sensor::BME280` | Temp / Press / RH |
197
- | BME680 | :heart: | I2C | `Sensor::BME680` | Temp / Press / RH / TVOC |
198
- | HTU21D | :green_heart: | I2C | `Sensor::HTU21D` | Temp / RH | No user register read
199
- | HTU31D | :green_heart: | I2C | `Sensor::HTU31D` | Temp / RH | No diagnostic read
200
- | AHT10/15 | :green_heart: | I2C | `Sensor::AHT10` | Temp / RH |
201
- | AHT20/21/25 | :green_heart: | I2C | `Sensor::AHT20` | Temp / RH |
202
- | ENS160 | :heart: | I2C | `Sensor::ENS160` | eCO2 / TVOC / AQI |
203
- | AGS02MA | :heart: | I2C | `Sensor::AGS02MA` | TVOC |
204
- | SCD40 | :heart: | I2C | `Sensor::SDC40` | Temp / Press / CO2 |
205
- | CCS811 | :heart: | I2C | `Sensor::CCS811` | eCO2 |
206
-
207
- ### Light Sensors
208
-
209
- | Name | Status | Interface | Component Class | Notes |
210
- | :--------------- | :------: | :-------- | :--------------- |------ |
211
- | BH1750 | :heart: | Digital In | `Sensor::BH1750` | Ambient Light
212
- | TCS34725 | :heart: | I2C | `Sensor::TCS34725` | RGB
213
- | APDS9960 | :heart: | I2C | `Sensor::APDS9960` | Proximity, RGB, Gesture
214
-
215
- ### PIR Motion Sensors
216
- | Name | Status | Interface | Component Class | Notes |
217
- | :--------------- | :------: | :-------- | :--------------- |------ |
218
- | HC-SR501 | :green_heart: | Digital In | `Sensor::GenericPIR` |
219
- | HC-SR505 | :yellow_heart: | Digital In | `Sensor::GenericPIR` |
220
- | AS312 | :green_heart: | Digital In | `Sensor::GenericPIR` |
221
- | AM312 | :yellow_heart: | Digital In | `Sensor::GenericPIR` |
222
-
223
- ### Distance Sensors
224
-
225
- | Name | Status | Interface | Component Class | Notes |
226
- | :--------------- | :------: | :-------- | :--------------- |------ |
227
- | HC-SR04 | :green_heart: | Digi In/Out | `Sensor::HCSR04` | Ultrasonic, 20-4000mm
228
- | RCWL-9620 | :green_heart: | I2C | `Sensor::RCWL9260` | Ultrasonic, 20-4500mm
229
- | VL53L0X | :heart: | I2C | `Sensor::VL53L0X` | Laser, 30 - 1000mm
230
- | GP2Y0E03 | :heart: | I2C | `Sensor::GP2Y0E03` | Infrared, 40 - 500mm
231
-
232
- ### Inertial Measurement Units
233
-
234
- | Name | Status | Interface | Component Class | Notes |
235
- | :--------------- | :------: | :-------- | :--------------- |------ |
236
- | ADXL345 | :heart: | I2C | `Sensor::ADXL345` | Accelerometer
237
- | IT3205 | :heart: | I2C | `Sensor::IT3205` | Gyroscope
238
- | HMC5883L | :heart: | I2C | `Sensor::HMC5883L` | Compass
239
- | MPU6050 | :heart: | I2C | `Sensor::MPU6050` | Gyro + Accelerometer
240
- | MPU6886 | :heart: | I2C | `Sensor::MPU6886` | Gyro + Accelerometer
241
- | BMI160 | :heart: | I2C | `Sensor::BMI160` | Gyro + Accelerometer
242
- | LSM6DS3 | :heart: | I2C | `Sensor:LSM6DS3` | Gyro + Accelerometer
243
-
244
- ### Real Time Clocks
245
-
246
- | Name | Status | Interface | Component Class | Notes |
247
- | :--------------- | :------: | :-------- | :--------------- |------ |
248
- | DS1302 | :heart: | I2C | `RTC::DS1302` |
249
- | DS1307 | :heart: | I2C | `RTC::DS1307` |
250
- | DS3231 | :green_heart: | I2C | `RTC::DS3231` | Alarms not implemented
251
- | PCF8563 | :heart: | I2C | `RTC::PCF8563` |
252
-
253
- ### GPS
254
-
255
- | Name | Status | Interface | Component Class | Notes |
256
- | :--------------- | :------: | :-------- | :--------------- |------ |
257
- | GT-U7 | :heart: | UART | - |
258
-
259
- ### Miscellaneous
260
-
261
- | Name | Status | Interface | Component Class | Notes |
262
- | :--------------- | :------: | :-------- | :--------------- |------ |
263
- | Board EEPROM | :green_heart: | Built-In | `EEPROM::BuiltIn` | Arduino ARM boards have no EEPROM
264
- | MFRC522 | :heart: | SPI/I2C | `DigitalIO::MFRC522` | RFID tag reader / writer
@@ -1,84 +0,0 @@
1
- #
2
- # Repeatedly writes filled and empty frames to the OLED
3
- # Calculates frames per second. Higher is better.
4
- #
5
- # RESULTS:
6
- # July 6 2023 | i7 8700k CPU | CRuby 3.2.1 | 100 frames | 1 Mhz I2C frequency | Average of 3 runs
7
- #
8
- # Arduino Uno R3 : 5.3 fps (ATmega16u2 UART bridge @ 115200, no I2C level shifter)
9
- # Arduino Uno R3 : 7.1 fps (ATmega16u2 UART bridge @ 230400, no I2C level shifter)
10
- # Arduino Leonardo : 12.9 fps (native USB, no I2C level shifter)
11
- # Arduino Due : 43.0 fps (native USB)
12
- # Arduino Due : 7.9 fps (programming USB @ 115200)
13
- # Arduino Zero : 28.6 fps (native USB)
14
- # Arduino Zero : 9.4 fps (programming USB @ 115200)
15
- # Arduino Zero : 13.6 fps (programming USB @ 230400)
16
- # ESP8266 (Node MCU) : 9.9 fps (Silicon Labs UART bridge @ 115200)
17
- # ESP8266 (Node MCU) : 19.7 fps (Silicon Labs UART bridge @ 230400)
18
- # ESP32 V1 : 9.8 fps (Silicon Labs UART bridge @ 115200)
19
- # ESP32 V1 : 19.4 fps (Silicon Labs UART bridge @ 230400)
20
- # ESP32-S3 : 58.8 fps (native USB)
21
- # Raspberry Pi Pico W : 36.4 fps (native USB)
22
- #
23
- # July 15 2023 | i7 8700k CPU | CRuby 3.2.1 | 100 frames | 1 Mhz I2C frequency | Average of 3 runs
24
- #
25
- # Arduino Uno R4 WiFi : 7.5 fps (USB through ESP32-S3 @ 115200, 32-byte I2C limit, no I2C level shifter)
26
- # Arduino Uno R4 WiFi : 7.8 fps (USB through ESP32-S3 @ 230400, 32-byte I2C limit, no I2C level shifter)
27
- #
28
- # August 13 2023 | i7 8700k CPU | CRuby 3.2.1 | 100 frames | 1 Mhz I2C frequency | Average of 3 runs
29
- #
30
- # Arduino Nano Every : 9.2 fps (USB through ATSAMD11 @ 115200, 128-byte I2C limit, no I2C level shifter)
31
- # Arduino Nano Every : 13.0 fps (USB through ATSAMD11 @ 230400, 128-byte I2C limit, no I2C level shifter)
32
- #
33
- # February 25 2024 | i7 8700k CPU | CRuby 3.2.1 | 100 frames | 1 Mhz I2C frequency | Average of 3 runs
34
- #
35
- # ESP32-S3 : 51.8 fps (native USB) - Changed from 64 to 128 serial ACK interval
36
- # ESP32-C3 : 51.7 fps (native USB) - Changed from 64 to 128 serial ACK interval
37
- #
38
- require 'bundler/setup'
39
- require 'denko'
40
-
41
- # Settings
42
- # Must match speed in the sketch for UART briges. Doesn't matter for native USB.
43
- BAUD_RATE = 115_200
44
- FRAME_COUNT = 100
45
- # Request 1 Mhz I2C frequency. Wire libraries will fall back to fastest available speed.
46
- I2C_FREQUENCY = 1_000_000
47
- # Use :SDA0 for RP2040
48
- I2C_PIN = :SDA
49
-
50
- # Setup
51
- board = Denko::Board.new(Denko::Connection::Serial.new(baud: BAUD_RATE))
52
- bus = Denko::I2C::Bus.new(board: board, pin: I2C_PIN)
53
- oled = Denko::Display::SSD1306.new(bus: bus, rotate: true, i2c_frequency: I2C_FREQUENCY)
54
- canvas = oled.canvas
55
-
56
- # Intro
57
- canvas.print "SSD1306 Benchmark"
58
- oled.draw
59
- sleep 1
60
-
61
- # Run
62
- start = Time.now
63
- (FRAME_COUNT / 2).times do
64
- canvas.fill
65
- oled.draw
66
- canvas.clear
67
- oled.draw
68
- end
69
- board.finish_write
70
- finish = Time.now
71
-
72
- # Calculate results
73
- fps = FRAME_COUNT / (finish - start)
74
-
75
- # Print to terminal
76
- puts "SSD1306 benchmark result: #{fps.round(2)} fps"
77
- puts
78
-
79
- # Print to screen
80
- canvas.clear
81
- canvas.text_cursor = [0,0]
82
- canvas.print "#{fps.round(2)} fps"
83
- oled.draw
84
- board.finish_write
@@ -1,48 +0,0 @@
1
- #
2
- # This example combines the SHTX and QMP6988 examples. The M5Stack ENV III unit
3
- # contains both sensors, accessible over a single I2C connection.
4
- #
5
- require 'bundler/setup'
6
- require 'denko'
7
-
8
- board = Denko::Board.new(Denko::Connection::Serial.new)
9
- bus = Denko::I2C::Bus.new(board: board, pin: :SDA)
10
- sht = Denko::Sensor::SHT3X.new(bus: bus) # address: 0x44 default
11
- qmp = Denko::Sensor::QMP6988.new(bus: bus) # address: 0x70 default
12
-
13
- # Configure for higher accuracy.
14
- sht.repeatability = :high
15
- qmp.temperature_samples = 2
16
- qmp.pressure_samples = 16
17
- qmp.iir_coefficient = 2
18
-
19
- # Buggy on ESP32-S3 in forced mode. Data registers return zeroes on all but first read.
20
- # Can't recreate on ESP32 V1, AVR or SAMD21. Put it in contiuous mode just in case.
21
- qmp.continuous_mode
22
-
23
- # Get the shared #print_tph_reading method to print readings neatly.
24
- require_relative '../sensor/neat_tph_readings'
25
-
26
- # How many degrees C the two temperature values can differ by before a warning.
27
- TOLERANCE = 0.50
28
-
29
- loop do
30
- # Read both sensors.
31
- qmp_reading = qmp.read
32
- sht_reading = sht.read
33
-
34
- # Retry immediately if either failed.
35
- next unless (sht_reading && qmp_reading)
36
-
37
- # Warn if large gap between temperature readings.
38
- difference = (qmp_reading[:temperature] - sht_reading[:temperature]).abs
39
- if (difference > TOLERANCE)
40
- puts "WARNING: temperature values differed by more than #{TOLERANCE}\xC2\xB0C (#{difference.round(4)} \xC2\xB0C actual)"
41
- end
42
-
43
- # Combine values from both sensors, averaging their temperatures.
44
- average_temperature = (qmp_reading[:temperature] + sht_reading[:temperature]) / 2.0
45
- print_tph_reading(temperature: average_temperature, humidity: sht_reading[:humidity], pressure: qmp_reading[:pressure])
46
-
47
- sleep 5
48
- end
@@ -1,48 +0,0 @@
1
- #
2
- # Example using a rotary encoder to control audio output volume on a Mac.
3
- #
4
- require 'bundler/setup'
5
- require 'denko'
6
-
7
- board = Denko::Board.new(Denko::Connection::Serial.new)
8
- encoder = Denko::DigitalIO::RotaryEncoder.new board: board,
9
- pins:{ clock: 4, data: 5 },
10
- divider: 1, # (default) read approx every divider ms
11
- steps_per_revolution: 30 # (default)
12
-
13
- # Set up a pseudo terminal with osascript (AppleScript) in interactive mode.
14
- # Calling a separate script each update is too slow.
15
- class AppleVolumeWrapper
16
- require 'pty'
17
- require 'expect'
18
-
19
- def initialize
20
- @in, @out, pid = PTY.spawn('osascript -i')
21
- @in.expect(/>> /) # Terminal ready.
22
- end
23
-
24
- def get
25
- @out.write("output volume of (get volume settings)\r\n")
26
- @in.expect(/=> (\d+)\r\n/)[1].to_i
27
- end
28
-
29
- def set(value)
30
- @out.write("set volume output volume #{value}\r\n")
31
- @in.expect(/>> /)
32
- end
33
- end
34
-
35
- volume = AppleVolumeWrapper.new
36
- puts "Current volume: #{volume.get}%"
37
-
38
- encoder.add_callback do |update|
39
- # Increase by 2% for every step so it responds faster.
40
- value = (volume.get + (update[:change] * 2))
41
- value = 0 if value < 0
42
- value = 100 if value > 100
43
- volume.set(value)
44
- current_volume = volume.get
45
- puts "Current volume: #{current_volume}%"
46
- end
47
-
48
- sleep
@@ -1,48 +0,0 @@
1
- #
2
- # This example polls an HTU21D (temp/humidity sensor) in the background.
3
- # The main thread refreshes an SSD1306 OLED ~20 times per second,
4
- # showing the latest temperature and humidity values, and current time.
5
- # Both devices are conected to the same I2C bus.
6
- #
7
- require 'bundler/setup'
8
- require 'denko'
9
-
10
- board = Denko::Board.new(Denko::Connection::Serial.new)
11
- i2c = Denko::I2C::Bus.new(board: board, pin: :SDA)
12
-
13
- # Get temperature and humidity every second.
14
- htu21d = Denko::Sensor::HTU21D.new(bus: i2c)
15
- htu21d.temperature.poll(1)
16
- htu21d.humidity.poll(1)
17
-
18
- oled = Denko::Display::SSD1306.new(bus: i2c, rotate: true)
19
- canvas = oled.canvas
20
- last_refresh = Time.now
21
-
22
- loop do
23
- elapsed = Time.now - last_refresh
24
-
25
- # Aim for 20 fps.
26
- if elapsed > 0.049
27
- canvas.clear
28
-
29
- canvas.text_cursor = [0,0]
30
- canvas.print "Time: #{Time.now.strftime("%H:%M:%S.%L")}"
31
-
32
- if htu21d[:temperature]
33
- canvas.text_cursor = [0,8]
34
- canvas.print "Temp: " + ('%.3f' % htu21d[:temperature]).rjust(7, " ") + " C"
35
- end
36
-
37
- if htu21d[:humidity]
38
- canvas.text_cursor = [0,16]
39
- canvas.print "Humidity: " + ('%.3f' % htu21d[:humidity]).rjust(7, " ") + " %"
40
- end
41
-
42
- # Only refresh the area in use.
43
- oled.draw(0, 127, 0, 24)
44
- last_refresh = Time.now
45
- else
46
- sleep 0.001
47
- end
48
- end
@@ -1,57 +0,0 @@
1
- #
2
- # Example using an ADS1115 ADC over the I2C bus.
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
- ads = Denko::AnalogIO::ADS1115.new(bus: bus)
10
-
11
- # Helper method so readings look nice.
12
- def print_reading(name, raw, voltage)
13
- print "#{Time.now.strftime '%Y-%m-%d %H:%M:%S'} - "
14
- print "#{name.rjust(18, " ")} | "
15
- print "Raw: #{raw.to_s.rjust(6, " ")} | "
16
- print "Voltage: "
17
- print ("%.10f" % voltage).rjust(13, " ")
18
- puts " V"
19
- end
20
-
21
- #
22
- # Use the ADS1115 directly by writing values to its config registers.
23
- # ADS1115#read automatically waits for conversion time and gets the 16-bit reading.
24
- # See datasheet for register bitmaps.
25
- #
26
- # Note: This is the only way to use continuous mode. Subcomponents always use one-shot.
27
- #
28
- ads.read([0b11000001, 0b10001011]) do |reading|
29
- voltage = reading * 0.0001875
30
- print_reading("Direct", reading, voltage)
31
- end
32
-
33
- #
34
- # Or use its BoardProxy interface, adding subcomponents as if it were a Board.
35
- # The key adc: can substitute for board: when intializing AnalogIO::Input.
36
- # Gain and sample rate bitmasks can be found in the datasheet.
37
- #
38
- # Input on pin 0, with pin 1 as differential negative input, and 6.144 V full range.
39
- diff_input = Denko::AnalogIO::Input.new(adc: ads, pin: 0, negative_pin: 1, gain: 0b000)
40
-
41
- # Input on pin 2 with no negative input (single ended), and 1.024V full range.
42
- # Ths one uses a 8 SPS rate, essentially 16x oversampling compared to the default 128.
43
- single_input = Denko::AnalogIO::Input.new(adc: ads, pin: 2, gain: 0b011, sample_rate: 0b000)
44
-
45
- # Poll the differential input every second.
46
- diff_input.poll(1) do |reading|
47
- voltage = reading * diff_input.volts_per_bit
48
- print_reading("Differential A1-A0", reading, voltage)
49
- end
50
-
51
- # Poll the single ended input every 2 seconds.
52
- single_input.poll(2) do |reading|
53
- voltage = reading * single_input.volts_per_bit
54
- print_reading("Single A2-GN", reading, voltage)
55
- end
56
-
57
- sleep
@@ -1,73 +0,0 @@
1
- #
2
- # Example using an ADS1118 ADC over the SPI bus.
3
- #
4
- require 'bundler/setup'
5
- require 'denko'
6
-
7
- board = Denko::Board.new(Denko::Connection::Serial.new)
8
-
9
- # Connect the ADS1118 pins to the board's default SPI pins.
10
- bus = Denko::SPI::Bus.new(board: board)
11
-
12
- # Or use a 2-way bit-bang SPI bus on any pins.
13
- # SPI_BIT_BANG_PINS = { clock: 13, input: 12, output: 11 }
14
- # bus = Denko::SPI::BitBang.new(board: board, pins: SPI_BIT_BANG_PINS)
15
-
16
- # Connect chip select/enable pin of the ADS1118 to pin 9.
17
- ads = Denko::AnalogIO::ADS1118.new(bus: bus, pin: 9)
18
-
19
- # Helper method so readings look nice.
20
- def print_reading(name, raw, voltage)
21
- print "#{Time.now.strftime '%Y-%m-%d %H:%M:%S'} - "
22
- print "#{name.rjust(18, " ")} | "
23
- print "Raw: #{raw.to_s.rjust(6, " ")} | "
24
- print "Voltage: "
25
- print ("%.10f" % voltage).rjust(13, " ")
26
- puts " V"
27
- end
28
-
29
- #
30
- # Read the ADS1118 internal temperature sensor.
31
- # This always uses the 128 SPS mode, and there is no polling method for it.
32
- #
33
- temperature = ads.temperature_read
34
- puts "ADS1118 Temperature: #{temperature} \xC2\xB0C"
35
- puts
36
-
37
- #
38
- # Use the ADS1118 directly by writing values to its config registers.
39
- # ADS1118#read automatically waits for conversion time and gets the 16-bit reading.
40
- # See datasheet for register bitmaps.
41
- #
42
- # Note: This is the only way to use continuous mode. Subcomponents always use one-shot.
43
- #
44
- ads.read([0b10000001, 0b10001011]) do |reading|
45
- voltage = reading * 0.0001875
46
- print_reading("Direct", reading, voltage)
47
- end
48
-
49
- #
50
- # Or use its BoardProxy interface, adding subcomponents as if it were a Board.
51
- # The key adc: can substitute for board: when intializing AnalogIO::Input.
52
- # Gain and sample rate bitmasks can be found in the datasheet.
53
- #
54
- # Input on pin 0, with pin 1 as differential negative input, and 6.144 V full range.
55
- diff_input = Denko::AnalogIO::Input.new(adc: ads, pin: 0, negative_pin: 1, gain: 0b000)
56
-
57
- # Input on pin 2 with no negative input (single ended), and 1.024V full range.
58
- # Ths one uses a 8 SPS rate, essentially 16x oversampling compared to the default 128.
59
- single_input = Denko::AnalogIO::Input.new(adc: ads, pin: 2, gain: 0b011, sample_rate: 0b000)
60
-
61
- # Poll the differential input every second.
62
- diff_input.poll(1) do |reading|
63
- voltage = reading * diff_input.volts_per_bit
64
- print_reading("Differential A1-A0", reading, voltage)
65
- end
66
-
67
- # Poll the single ended input every 2 seconds.
68
- single_input.poll(2) do |reading|
69
- voltage = reading * single_input.volts_per_bit
70
- print_reading("Single A2-GN", reading, voltage)
71
- end
72
-
73
- sleep