denko 0.13.4 → 0.13.6

Sign up to get free protection for your applications and to get access to all the features.
Files changed (404) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/build_esp32.yml +1 -0
  3. data/CHANGELOG.md +17 -1
  4. data/DEPS_CLI.md +2 -2
  5. data/DEPS_IDE.md +4 -3
  6. data/HARDWARE.md +41 -30
  7. data/README.md +2 -2
  8. data/benchmarks/i2c_ssd1306_refresh.rb +5 -0
  9. data/denko.gemspec +4 -4
  10. data/examples/i2c/search.rb +2 -0
  11. data/examples/sensor/hcsr04.rb +14 -0
  12. data/lib/denko/board/pulse.rb +4 -0
  13. data/lib/denko/board.rb +1 -0
  14. data/lib/denko/sensor/hcsr04.rb +33 -0
  15. data/lib/denko/sensor.rb +1 -0
  16. data/lib/denko/version.rb +1 -1
  17. data/src/denko_wifi.ino +39 -14
  18. data/src/lib/Denko.cpp +6 -2
  19. data/src/lib/Denko.h +4 -2
  20. data/src/lib/DenkoCoreIO.cpp +5 -3
  21. data/src/lib/DenkoDefines.h +16 -1
  22. data/src/lib/DenkoLEDArray.cpp +1 -1
  23. data/src/lib/DenkoPulseInput.cpp +32 -1
  24. data/vendor/board-maps/.gitignore +56 -0
  25. data/vendor/board-maps/.gitmodules +24 -0
  26. data/vendor/board-maps/BoardMap.h +1492 -0
  27. data/vendor/board-maps/README.md +52 -0
  28. data/vendor/board-maps/lib/boards_parser.rb +66 -0
  29. data/vendor/board-maps/lib/header_parser.rb +189 -0
  30. data/vendor/board-maps/run.rb +57 -0
  31. data/vendor/board-maps/yaml/0XCB_HELIOS.yml +48 -0
  32. data/vendor/board-maps/yaml/ADAFRUIT_CAMERA_ESP32S3.yml +11 -0
  33. data/vendor/board-maps/yaml/ADAFRUIT_FEATHER_ESP32S2.yml +25 -0
  34. data/vendor/board-maps/yaml/ADAFRUIT_FEATHER_ESP32S2_REVTFT.yml +25 -0
  35. data/vendor/board-maps/yaml/ADAFRUIT_FEATHER_ESP32S2_TFT.yml +27 -0
  36. data/vendor/board-maps/yaml/ADAFRUIT_FEATHER_ESP32S3.yml +34 -0
  37. data/vendor/board-maps/yaml/ADAFRUIT_FEATHER_ESP32S3_NOPSRAM.yml +34 -0
  38. data/vendor/board-maps/yaml/ADAFRUIT_FEATHER_ESP32S3_REVTFT.yml +25 -0
  39. data/vendor/board-maps/yaml/ADAFRUIT_FEATHER_ESP32S3_TFT.yml +27 -0
  40. data/vendor/board-maps/yaml/ADAFRUIT_FEATHER_ESP32_V2.yml +34 -0
  41. data/vendor/board-maps/yaml/ADAFRUIT_FEATHER_RP2040.yml +48 -0
  42. data/vendor/board-maps/yaml/ADAFRUIT_FEATHER_RP2040_CAN.yml +48 -0
  43. data/vendor/board-maps/yaml/ADAFRUIT_FEATHER_RP2040_DVI.yml +48 -0
  44. data/vendor/board-maps/yaml/ADAFRUIT_FEATHER_RP2040_PROP_MAKER.yml +48 -0
  45. data/vendor/board-maps/yaml/ADAFRUIT_FEATHER_RP2040_RFM.yml +48 -0
  46. data/vendor/board-maps/yaml/ADAFRUIT_FEATHER_RP2040_SCORPIO.yml +48 -0
  47. data/vendor/board-maps/yaml/ADAFRUIT_FEATHER_RP2040_THINKINK.yml +48 -0
  48. data/vendor/board-maps/yaml/ADAFRUIT_FEATHER_RP2040_USB_HOST.yml +48 -0
  49. data/vendor/board-maps/yaml/ADAFRUIT_ITSYBITSY_ESP32.yml +24 -0
  50. data/vendor/board-maps/yaml/ADAFRUIT_ITSYBITSY_RP2040.yml +48 -0
  51. data/vendor/board-maps/yaml/ADAFRUIT_KB2040_RP2040.yml +48 -0
  52. data/vendor/board-maps/yaml/ADAFRUIT_MACROPAD_RP2040.yml +48 -0
  53. data/vendor/board-maps/yaml/ADAFRUIT_MATRIXPORTAL_ESP32S3.yml +16 -0
  54. data/vendor/board-maps/yaml/ADAFRUIT_METRO_RP2040.yml +48 -0
  55. data/vendor/board-maps/yaml/ADAFRUIT_QTPY_ESP32C3.yml +12 -0
  56. data/vendor/board-maps/yaml/ADAFRUIT_QTPY_ESP32S2.yml +22 -0
  57. data/vendor/board-maps/yaml/ADAFRUIT_QTPY_ESP32S3_N4R2.yml +20 -0
  58. data/vendor/board-maps/yaml/ADAFRUIT_QTPY_ESP32S3_NOPSRAM.yml +20 -0
  59. data/vendor/board-maps/yaml/ADAFRUIT_QTPY_ESP32_PICO.yml +28 -0
  60. data/vendor/board-maps/yaml/ADAFRUIT_QTPY_RP2040.yml +48 -0
  61. data/vendor/board-maps/yaml/ADAFRUIT_STEMMAFRIEND_RP2040.yml +48 -0
  62. data/vendor/board-maps/yaml/ADAFRUIT_TRINKEYQT_RP2040.yml +48 -0
  63. data/vendor/board-maps/yaml/ALKS.yml +34 -0
  64. data/vendor/board-maps/yaml/AMPERKA_WIFI_SLOT.yml +16 -0
  65. data/vendor/board-maps/yaml/ARTRONSHOP_RP2_NANO.yml +32 -0
  66. data/vendor/board-maps/yaml/ATD143_S3.yml +41 -0
  67. data/vendor/board-maps/yaml/AVENTEN_S3_SYNC.yml +38 -0
  68. data/vendor/board-maps/yaml/AVR_ADK.yml +24 -0
  69. data/vendor/board-maps/yaml/AVR_BT.yml +16 -0
  70. data/vendor/board-maps/yaml/AVR_CIRCUITPLAY.yml +14 -0
  71. data/vendor/board-maps/yaml/AVR_DUEMILANOVE.yml +16 -0
  72. data/vendor/board-maps/yaml/AVR_ESPLORA.yml +20 -0
  73. data/vendor/board-maps/yaml/AVR_ETHERNET.yml +16 -0
  74. data/vendor/board-maps/yaml/AVR_FIO.yml +16 -0
  75. data/vendor/board-maps/yaml/AVR_GEMMA.yml +6 -0
  76. data/vendor/board-maps/yaml/AVR_INDUSTRIAL101.yml +20 -0
  77. data/vendor/board-maps/yaml/AVR_LEONARDO.yml +20 -0
  78. data/vendor/board-maps/yaml/AVR_LEONARDO_ETH.yml +20 -0
  79. data/vendor/board-maps/yaml/AVR_LILYPAD.yml +16 -0
  80. data/vendor/board-maps/yaml/AVR_LILYPAD_USB.yml +20 -0
  81. data/vendor/board-maps/yaml/AVR_LININO_ONE.yml +20 -0
  82. data/vendor/board-maps/yaml/AVR_MEGA.yml +24 -0
  83. data/vendor/board-maps/yaml/AVR_MEGA2560.yml +24 -0
  84. data/vendor/board-maps/yaml/AVR_MICRO.yml +20 -0
  85. data/vendor/board-maps/yaml/AVR_MINI.yml +16 -0
  86. data/vendor/board-maps/yaml/AVR_NANO.yml +16 -0
  87. data/vendor/board-maps/yaml/AVR_NANO_EVERY.yml +22 -0
  88. data/vendor/board-maps/yaml/AVR_NG.yml +16 -0
  89. data/vendor/board-maps/yaml/AVR_PRO.yml +16 -0
  90. data/vendor/board-maps/yaml/AVR_ROBOT_CONTROL.yml +22 -0
  91. data/vendor/board-maps/yaml/AVR_ROBOT_MOTOR.yml +19 -0
  92. data/vendor/board-maps/yaml/AVR_UNO.yml +16 -0
  93. data/vendor/board-maps/yaml/AVR_UNO_WIFI_DEV_ED.yml +16 -0
  94. data/vendor/board-maps/yaml/AVR_UNO_WIFI_REV2.yml +22 -0
  95. data/vendor/board-maps/yaml/AVR_YUN.yml +20 -0
  96. data/vendor/board-maps/yaml/AVR_YUNMINI.yml +20 -0
  97. data/vendor/board-maps/yaml/AirM2M_CORE_ESP32C3.yml +14 -0
  98. data/vendor/board-maps/yaml/BEE_DATA_LOGGER.yml +39 -0
  99. data/vendor/board-maps/yaml/BPI_BIT.yml +9 -0
  100. data/vendor/board-maps/yaml/BPI_LEAF_S3.yml +41 -0
  101. data/vendor/board-maps/yaml/BRIDGETEK_IDM2040-7A.yml +48 -0
  102. data/vendor/board-maps/yaml/BeeMotionS3.yml +45 -0
  103. data/vendor/board-maps/yaml/Bee_Motion.yml +30 -0
  104. data/vendor/board-maps/yaml/Bee_Motion_Mini.yml +1 -0
  105. data/vendor/board-maps/yaml/Bee_S3.yml +38 -0
  106. data/vendor/board-maps/yaml/CHALLENGER_2040_LORA_RP2040.yml +39 -0
  107. data/vendor/board-maps/yaml/CHALLENGER_2040_LTE_RP2040.yml +38 -0
  108. data/vendor/board-maps/yaml/CHALLENGER_2040_NFC_RP2040.yml +32 -0
  109. data/vendor/board-maps/yaml/CHALLENGER_2040_SDRTC_RP2040.yml +36 -0
  110. data/vendor/board-maps/yaml/CHALLENGER_2040_SUBGHZ_RP2040.yml +39 -0
  111. data/vendor/board-maps/yaml/CHALLENGER_2040_UWB_RP2040.yml +39 -0
  112. data/vendor/board-maps/yaml/CHALLENGER_2040_WIFI6_BLE_RP2040.yml +42 -0
  113. data/vendor/board-maps/yaml/CHALLENGER_2040_WIFI_BLE_RP2040.yml +42 -0
  114. data/vendor/board-maps/yaml/CHALLENGER_2040_WIFI_RP2040.yml +38 -0
  115. data/vendor/board-maps/yaml/CHALLENGER_NB_2040_WIFI_RP2040.yml +38 -0
  116. data/vendor/board-maps/yaml/CONNECTIVITY_2040_LTE_WIFI_BLE_RP2040.yml +48 -0
  117. data/vendor/board-maps/yaml/CRABIK_SLOT_ESP32_S3.yml +19 -0
  118. data/vendor/board-maps/yaml/CYTRON_MAKER_FEATHER_AIOT_S3.yml +29 -0
  119. data/vendor/board-maps/yaml/CYTRON_MAKER_NANO_RP2040.yml +48 -0
  120. data/vendor/board-maps/yaml/CYTRON_MAKER_PI_RP2040.yml +48 -0
  121. data/vendor/board-maps/yaml/CYTRON_MAKER_UNO_RP2040.yml +48 -0
  122. data/vendor/board-maps/yaml/CoreESP32.yml +53 -0
  123. data/vendor/board-maps/yaml/D1_MINI32.yml +45 -0
  124. data/vendor/board-maps/yaml/D1_UNO32.yml +28 -0
  125. data/vendor/board-maps/yaml/DATANOISETV_PICOADK.yml +48 -0
  126. data/vendor/board-maps/yaml/DEGZ_SUIBO_RP2040.yml +48 -0
  127. data/vendor/board-maps/yaml/DENKY.yml +35 -0
  128. data/vendor/board-maps/yaml/DENKY_PICOV3.yml +35 -0
  129. data/vendor/board-maps/yaml/DENKY_WROOM32.yml +35 -0
  130. data/vendor/board-maps/yaml/DEPARTMENT_OF_ALCHEMY_MINIMAIN_ESP32S2.yml +26 -0
  131. data/vendor/board-maps/yaml/DFROBOT_BEETLE_ESP32_C3.yml +14 -0
  132. data/vendor/board-maps/yaml/DFROBOT_BEETLE_RP2040.yml +48 -0
  133. data/vendor/board-maps/yaml/DFROBOT_FIREBEETLE_2_ESP32E.yml +49 -0
  134. data/vendor/board-maps/yaml/DFROBOT_FIREBEETLE_2_ESP32S3.yml +38 -0
  135. data/vendor/board-maps/yaml/DFROBOT_ROMEO_ESP32S3.yml +7 -0
  136. data/vendor/board-maps/yaml/DPU_ESP32.yml +35 -0
  137. data/vendor/board-maps/yaml/DYDK.yml +38 -0
  138. data/vendor/board-maps/yaml/DYDK1A.yml +37 -0
  139. data/vendor/board-maps/yaml/DYDK1Av2.yml +45 -0
  140. data/vendor/board-maps/yaml/DYG.yml +20 -0
  141. data/vendor/board-maps/yaml/DYM.yml +40 -0
  142. data/vendor/board-maps/yaml/DYMv2.yml +39 -0
  143. data/vendor/board-maps/yaml/D_Duino_32.yml +37 -0
  144. data/vendor/board-maps/yaml/ELECTRONICCATS_HUNTERCAT_NFC.yml +44 -0
  145. data/vendor/board-maps/yaml/ESP320.yml +8 -0
  146. data/vendor/board-maps/yaml/ESP32C3_DEV.yml +14 -0
  147. data/vendor/board-maps/yaml/ESP32C3_M1_I_KIT.yml +13 -0
  148. data/vendor/board-maps/yaml/ESP32S2_DEV.yml +43 -0
  149. data/vendor/board-maps/yaml/ESP32S2_THING_PLUS.yml +44 -0
  150. data/vendor/board-maps/yaml/ESP32S2_USB.yml +43 -0
  151. data/vendor/board-maps/yaml/ESP32S3_CAM_LCD.yml +7 -0
  152. data/vendor/board-maps/yaml/ESP32S3_DEV.yml +38 -0
  153. data/vendor/board-maps/yaml/ESP32_DEV.yml +35 -0
  154. data/vendor/board-maps/yaml/ESP32_DEVKIT_LIPO.yml +35 -0
  155. data/vendor/board-maps/yaml/ESP32_EVB.yml +7 -0
  156. data/vendor/board-maps/yaml/ESP32_GATEWAY.yml +13 -0
  157. data/vendor/board-maps/yaml/ESP32_GATEWAY_C.yml +13 -0
  158. data/vendor/board-maps/yaml/ESP32_GATEWAY_E.yml +13 -0
  159. data/vendor/board-maps/yaml/ESP32_GATEWAY_F.yml +13 -0
  160. data/vendor/board-maps/yaml/ESP32_IOT_REDBOARD.yml +36 -0
  161. data/vendor/board-maps/yaml/ESP32_MICROMOD.yml +24 -0
  162. data/vendor/board-maps/yaml/ESP32_PICO.yml +35 -0
  163. data/vendor/board-maps/yaml/ESP32_POE.yml +7 -0
  164. data/vendor/board-maps/yaml/ESP32_POE_ISO.yml +7 -0
  165. data/vendor/board-maps/yaml/ESP32_S3R8N16.yml +3 -0
  166. data/vendor/board-maps/yaml/ESP32_S3_BOX.yml +19 -0
  167. data/vendor/board-maps/yaml/ESP32_S3_USB_OTG.yml +11 -0
  168. data/vendor/board-maps/yaml/ESP32_THING.yml +36 -0
  169. data/vendor/board-maps/yaml/ESP32_THING_PLUS.yml +33 -0
  170. data/vendor/board-maps/yaml/ESP32_THING_PLUS_C.yml +33 -0
  171. data/vendor/board-maps/yaml/ESP32_WROOM_DA.yml +35 -0
  172. data/vendor/board-maps/yaml/ESP32_WROVER_KIT.yml +35 -0
  173. data/vendor/board-maps/yaml/ESP8266_ADAFRUIT_HUZZAH.yml +9 -0
  174. data/vendor/board-maps/yaml/ESP8266_AGRUMINO_LEMON_V4.yml +8 -0
  175. data/vendor/board-maps/yaml/ESP8266_ARDUINO_PRIMO.yml +7 -0
  176. data/vendor/board-maps/yaml/ESP8266_ARDUINO_STAR_OTTO.yml +7 -0
  177. data/vendor/board-maps/yaml/ESP8266_ARDUINO_UNOWIFI.yml +9 -0
  178. data/vendor/board-maps/yaml/ESP8266_ESP01.yml +9 -0
  179. data/vendor/board-maps/yaml/ESP8266_ESP07.yml +20 -0
  180. data/vendor/board-maps/yaml/ESP8266_ESP12.yml +20 -0
  181. data/vendor/board-maps/yaml/ESP8266_ESP13.yml +17 -0
  182. data/vendor/board-maps/yaml/ESP8266_ESP210.yml +9 -0
  183. data/vendor/board-maps/yaml/ESP8266_ESPECTRO_CORE.yml +9 -0
  184. data/vendor/board-maps/yaml/ESP8266_ESPINO_ESP12.yml +9 -0
  185. data/vendor/board-maps/yaml/ESP8266_ESPINO_ESP13.yml +9 -0
  186. data/vendor/board-maps/yaml/ESP8266_ESPRESSO_LITE_V1.yml +9 -0
  187. data/vendor/board-maps/yaml/ESP8266_ESPRESSO_LITE_V2.yml +9 -0
  188. data/vendor/board-maps/yaml/ESP8266_GENERIC.yml +9 -0
  189. data/vendor/board-maps/yaml/ESP8266_INVENT_ONE.yml +22 -0
  190. data/vendor/board-maps/yaml/ESP8266_NODEMCU_ESP12.yml +20 -0
  191. data/vendor/board-maps/yaml/ESP8266_NODEMCU_ESP12E.yml +20 -0
  192. data/vendor/board-maps/yaml/ESP8266_OAK.yml +9 -0
  193. data/vendor/board-maps/yaml/ESP8266_PHOENIX_V1.yml +9 -0
  194. data/vendor/board-maps/yaml/ESP8266_PHOENIX_V2.yml +9 -0
  195. data/vendor/board-maps/yaml/ESP8266_SCHIRMILABS_EDUINO_WIFI.yml +25 -0
  196. data/vendor/board-maps/yaml/ESP8266_SONOFF_BASIC.yml +9 -0
  197. data/vendor/board-maps/yaml/ESP8266_SONOFF_S20.yml +9 -0
  198. data/vendor/board-maps/yaml/ESP8266_SONOFF_SV.yml +9 -0
  199. data/vendor/board-maps/yaml/ESP8266_SONOFF_TH.yml +9 -0
  200. data/vendor/board-maps/yaml/ESP8266_THING.yml +9 -0
  201. data/vendor/board-maps/yaml/ESP8266_THING_DEV.yml +9 -0
  202. data/vendor/board-maps/yaml/ESP8266_WEMOS_D1MINI.yml +18 -0
  203. data/vendor/board-maps/yaml/ESP8266_WEMOS_D1MINILITE.yml +18 -0
  204. data/vendor/board-maps/yaml/ESP8266_WEMOS_D1MINIPRO.yml +18 -0
  205. data/vendor/board-maps/yaml/ESP8266_WEMOS_D1R1.yml +25 -0
  206. data/vendor/board-maps/yaml/ESP8266_WEMOS_D1WROOM02.yml +18 -0
  207. data/vendor/board-maps/yaml/ESP8266_WIO_LINK.yml +9 -0
  208. data/vendor/board-maps/yaml/ESP8266_XINABOX_CW01.yml +9 -0
  209. data/vendor/board-maps/yaml/ESPECTRO32.yml +36 -0
  210. data/vendor/board-maps/yaml/ESPea32.yml +36 -0
  211. data/vendor/board-maps/yaml/ESPino32.yml +36 -0
  212. data/vendor/board-maps/yaml/ET-Board.yml +26 -0
  213. data/vendor/board-maps/yaml/EXTREMEELEXTRONICS_RC2040.yml +46 -0
  214. data/vendor/board-maps/yaml/Edgebox-ESP-100.yml +7 -0
  215. data/vendor/board-maps/yaml/FEATHERS2.yml +43 -0
  216. data/vendor/board-maps/yaml/FEATHERS2NEO.yml +31 -0
  217. data/vendor/board-maps/yaml/FEATHERS3.yml +32 -0
  218. data/vendor/board-maps/yaml/FEATHER_ESP32.yml +32 -0
  219. data/vendor/board-maps/yaml/FLYBOARD2040_CORE.yml +48 -0
  220. data/vendor/board-maps/yaml/FRANZININHO_WIFI.yml +43 -0
  221. data/vendor/board-maps/yaml/FRANZININHO_WIFI_MSC.yml +43 -0
  222. data/vendor/board-maps/yaml/FROG_ESP32.yml +35 -0
  223. data/vendor/board-maps/yaml/FUNHOUSE_ESP32S2.yml +22 -0
  224. data/vendor/board-maps/yaml/GEN4_IOD.yml +9 -0
  225. data/vendor/board-maps/yaml/GENERIC_RP2040.yml +48 -0
  226. data/vendor/board-maps/yaml/HEALTHYPI_4.yml +36 -0
  227. data/vendor/board-maps/yaml/HONEYLEMON.yml +36 -0
  228. data/vendor/board-maps/yaml/HORNBILL_ESP32_DEV.yml +36 -0
  229. data/vendor/board-maps/yaml/HORNBILL_ESP32_MINIMA.yml +19 -0
  230. data/vendor/board-maps/yaml/ILABS_2040_RPICO32_RP2040.yml +47 -0
  231. data/vendor/board-maps/yaml/IMBRIOS_LOGSENS_V1P1.yml +23 -0
  232. data/vendor/board-maps/yaml/INTOROBOT_ESP32_DEV.yml +34 -0
  233. data/vendor/board-maps/yaml/IOXESP32.yml +36 -0
  234. data/vendor/board-maps/yaml/IOXESP32PS.yml +36 -0
  235. data/vendor/board-maps/yaml/LILYGO_T_DISPLAY.yml +35 -0
  236. data/vendor/board-maps/yaml/LILYGO_T_DISPLAY_S3.yml +32 -0
  237. data/vendor/board-maps/yaml/LIONBITS3_DEV.yml +34 -0
  238. data/vendor/board-maps/yaml/LOLIN32.yml +36 -0
  239. data/vendor/board-maps/yaml/LOLIN32_LITE.yml +36 -0
  240. data/vendor/board-maps/yaml/LOLIN_C3_MINI.yml +14 -0
  241. data/vendor/board-maps/yaml/LOLIN_D32.yml +36 -0
  242. data/vendor/board-maps/yaml/LOLIN_D32_PRO.yml +36 -0
  243. data/vendor/board-maps/yaml/LOLIN_S2_MINI.yml +44 -0
  244. data/vendor/board-maps/yaml/LOLIN_S2_PICO.yml +44 -0
  245. data/vendor/board-maps/yaml/LOLIN_S3.yml +39 -0
  246. data/vendor/board-maps/yaml/LOLIN_S3_MINI.yml +40 -0
  247. data/vendor/board-maps/yaml/LOLIN_S3_PRO.yml +40 -0
  248. data/vendor/board-maps/yaml/Lion_Bit_Dev_Board.yml +18 -0
  249. data/vendor/board-maps/yaml/LoPy.yml +37 -0
  250. data/vendor/board-maps/yaml/LoPy4.yml +37 -0
  251. data/vendor/board-maps/yaml/M5STACK_CORES3.yml +8 -0
  252. data/vendor/board-maps/yaml/M5STACK_Core2.yml +9 -0
  253. data/vendor/board-maps/yaml/M5STACK_FIRE.yml +10 -0
  254. data/vendor/board-maps/yaml/M5Stack-Timer-CAM.yml +10 -0
  255. data/vendor/board-maps/yaml/M5Stack_ATOM.yml +10 -0
  256. data/vendor/board-maps/yaml/M5Stack_ATOMS3.yml +7 -0
  257. data/vendor/board-maps/yaml/M5Stack_CoreInk.yml +9 -0
  258. data/vendor/board-maps/yaml/M5Stack_Core_ESP32.yml +10 -0
  259. data/vendor/board-maps/yaml/M5Stack_Station.yml +10 -0
  260. data/vendor/board-maps/yaml/M5Stamp_Pico.yml +7 -0
  261. data/vendor/board-maps/yaml/M5Stick_C.yml +10 -0
  262. data/vendor/board-maps/yaml/MAGTAG29_ESP32S2.yml +31 -0
  263. data/vendor/board-maps/yaml/MELOPERO_COOKIE_RP2040.yml +48 -0
  264. data/vendor/board-maps/yaml/MELOPERO_SHAKE_RP2040.yml +48 -0
  265. data/vendor/board-maps/yaml/METRO_ESP32S2.yml +44 -0
  266. data/vendor/board-maps/yaml/METRO_ESP32S3.yml +42 -0
  267. data/vendor/board-maps/yaml/MGBOT_IOTIK32A.yml +36 -0
  268. data/vendor/board-maps/yaml/MGBOT_IOTIK32B.yml +36 -0
  269. data/vendor/board-maps/yaml/MH_ET_LIVE_ESP32DEVKIT.yml +36 -0
  270. data/vendor/board-maps/yaml/MH_ET_LIVE_ESP32MINIKIT.yml +36 -0
  271. data/vendor/board-maps/yaml/MICROS2.yml +44 -0
  272. data/vendor/board-maps/yaml/MINIMA.yml +15 -0
  273. data/vendor/board-maps/yaml/MOD_WIFI_ESP8266.yml +9 -0
  274. data/vendor/board-maps/yaml/Metro.yml +8 -0
  275. data/vendor/board-maps/yaml/NAMINO_ARANCIO.yml +3 -0
  276. data/vendor/board-maps/yaml/NAMINO_ROSSO.yml +3 -0
  277. data/vendor/board-maps/yaml/NANO32.yml +36 -0
  278. data/vendor/board-maps/yaml/NANOS3.yml +25 -0
  279. data/vendor/board-maps/yaml/NANO_ESP32.yml +18 -0
  280. data/vendor/board-maps/yaml/NANO_RP2040_CONNECT.yml +35 -0
  281. data/vendor/board-maps/yaml/NEBULAS3.yml +33 -0
  282. data/vendor/board-maps/yaml/NEKOSYSTEMS_BL2040_MINI.yml +48 -0
  283. data/vendor/board-maps/yaml/NULLBITS_BIT_C_PRO.yml +48 -0
  284. data/vendor/board-maps/yaml/Node32s.yml +36 -0
  285. data/vendor/board-maps/yaml/NodeMCU_32S.yml +36 -0
  286. data/vendor/board-maps/yaml/ODROID_ESP32.yml +10 -0
  287. data/vendor/board-maps/yaml/ONEHORSE_ESP32_DEV.yml +34 -0
  288. data/vendor/board-maps/yaml/OROCA_EDUBOT.yml +33 -0
  289. data/vendor/board-maps/yaml/PIMORONI_PGA2040.yml +48 -0
  290. data/vendor/board-maps/yaml/PIMORONI_PLASMA2040.yml +29 -0
  291. data/vendor/board-maps/yaml/PIMORONI_TINY2040.yml +44 -0
  292. data/vendor/board-maps/yaml/PORTENTA_C33.yml +28 -0
  293. data/vendor/board-maps/yaml/PROS3.yml +33 -0
  294. data/vendor/board-maps/yaml/PYCOM_GPY.yml +37 -0
  295. data/vendor/board-maps/yaml/Piranha.yml +22 -0
  296. data/vendor/board-maps/yaml/Pocket32.yml +36 -0
  297. data/vendor/board-maps/yaml/QUALIA_S3_RGB666.yml +15 -0
  298. data/vendor/board-maps/yaml/QUANTUM.yml +35 -0
  299. data/vendor/board-maps/yaml/RAKWIRELESS_RAK11300.yml +47 -0
  300. data/vendor/board-maps/yaml/RASPBERRY_PI_PICO.yml +48 -0
  301. data/vendor/board-maps/yaml/RASPBERRY_PI_PICO_W.yml +48 -0
  302. data/vendor/board-maps/yaml/REDPILL_ESP32S3.yml +42 -0
  303. data/vendor/board-maps/yaml/REDSCORP_RP2040_EINS.yml +35 -0
  304. data/vendor/board-maps/yaml/REDSCORP_RP2040_PROMINI.yml +35 -0
  305. data/vendor/board-maps/yaml/RMP.yml +43 -0
  306. data/vendor/board-maps/yaml/SAMD_CIRCUITPLAYGROUND_EXPRESS.yml +11 -0
  307. data/vendor/board-maps/yaml/SAMD_MKR1000.yml +20 -0
  308. data/vendor/board-maps/yaml/SAMD_MKRFox1200.yml +19 -0
  309. data/vendor/board-maps/yaml/SAMD_MKRGSM1400.yml +15 -0
  310. data/vendor/board-maps/yaml/SAMD_MKRNB1500.yml +15 -0
  311. data/vendor/board-maps/yaml/SAMD_MKRVIDOR4000.yml +19 -0
  312. data/vendor/board-maps/yaml/SAMD_MKRWAN1300.yml +18 -0
  313. data/vendor/board-maps/yaml/SAMD_MKRWAN1310.yml +18 -0
  314. data/vendor/board-maps/yaml/SAMD_MKRWIFI1010.yml +19 -0
  315. data/vendor/board-maps/yaml/SAMD_MKRZERO.yml +19 -0
  316. data/vendor/board-maps/yaml/SAMD_NANO_33_IOT.yml +13 -0
  317. data/vendor/board-maps/yaml/SAMD_TIAN.yml +15 -0
  318. data/vendor/board-maps/yaml/SAMD_ZERO.yml +14 -0
  319. data/vendor/board-maps/yaml/SAM_DUE.yml +28 -0
  320. data/vendor/board-maps/yaml/SAM_ZERO.yml +15 -0
  321. data/vendor/board-maps/yaml/SEA_PICRO.yml +48 -0
  322. data/vendor/board-maps/yaml/SEEED_INDICATOR_RP2040.yml +47 -0
  323. data/vendor/board-maps/yaml/SEEED_XIAO_RP2040.yml +29 -0
  324. data/vendor/board-maps/yaml/SILICOGNITION_RP2040_SHIM.yml +30 -0
  325. data/vendor/board-maps/yaml/SOLDERPARTY_RP2040_STAMP.yml +48 -0
  326. data/vendor/board-maps/yaml/SONOFF_DUALR3.yml +35 -0
  327. data/vendor/board-maps/yaml/SPARKFUN_PROMICRO_RP2040.yml +48 -0
  328. data/vendor/board-maps/yaml/SPARKFUN_THINGPLUS_RP2040.yml +48 -0
  329. data/vendor/board-maps/yaml/STAMP_S3.yml +8 -0
  330. data/vendor/board-maps/yaml/TAMC_TERMOD_S3.yml +41 -0
  331. data/vendor/board-maps/yaml/TBEAM_USE_RADIO_SX1262.yml +28 -0
  332. data/vendor/board-maps/yaml/TBEAM_USE_RADIO_SX1268.yml +28 -0
  333. data/vendor/board-maps/yaml/TBEAM_USE_RADIO_SX1276.yml +28 -0
  334. data/vendor/board-maps/yaml/TBEAM_USE_RADIO_SX1278.yml +28 -0
  335. data/vendor/board-maps/yaml/TBEAM_USE_RADIO_SX1280.yml +28 -0
  336. data/vendor/board-maps/yaml/TBeam.yml +28 -0
  337. data/vendor/board-maps/yaml/TINYPICO.yml +35 -0
  338. data/vendor/board-maps/yaml/TINYS2.yml +43 -0
  339. data/vendor/board-maps/yaml/TINYS3.yml +25 -0
  340. data/vendor/board-maps/yaml/TTGO-T-OI-PLUS_DEV.yml +11 -0
  341. data/vendor/board-maps/yaml/TTGO_LoRa32_V1.yml +38 -0
  342. data/vendor/board-maps/yaml/TTGO_LoRa32_V2.yml +38 -0
  343. data/vendor/board-maps/yaml/TTGO_LoRa32_v21new.yml +38 -0
  344. data/vendor/board-maps/yaml/TTGO_T1.yml +36 -0
  345. data/vendor/board-maps/yaml/TTGO_T7_V13_Mini32.yml +36 -0
  346. data/vendor/board-maps/yaml/TTGO_T7_V14_Mini32.yml +36 -0
  347. data/vendor/board-maps/yaml/TWATCH_2020_V1.yml +9 -0
  348. data/vendor/board-maps/yaml/TWATCH_2020_V2.yml +9 -0
  349. data/vendor/board-maps/yaml/TWATCH_2020_V3.yml +9 -0
  350. data/vendor/board-maps/yaml/TWATCH_BASE.yml +9 -0
  351. data/vendor/board-maps/yaml/TWatch.yml +9 -0
  352. data/vendor/board-maps/yaml/Trueverit_ESP32_Universal_IoT_Driver.yml +18 -0
  353. data/vendor/board-maps/yaml/Trueverit_ESP32_Universal_IoT_Driver_MK_II.yml +18 -0
  354. data/vendor/board-maps/yaml/UBLOX_NINA_W10.yml +57 -0
  355. data/vendor/board-maps/yaml/UBLOX_NORA_W10.yml +43 -0
  356. data/vendor/board-maps/yaml/UNOWIFIR4.yml +17 -0
  357. data/vendor/board-maps/yaml/UPESY_RP2040_DEVKIT.yml +48 -0
  358. data/vendor/board-maps/yaml/VALTRACK_V4_MFW_ESP32_C3.yml +23 -0
  359. data/vendor/board-maps/yaml/VALTRACK_V4_VTS_ESP32_C3.yml +23 -0
  360. data/vendor/board-maps/yaml/VIYALAB_MIZU_RP2040.yml +48 -0
  361. data/vendor/board-maps/yaml/WATCHY.yml +7 -0
  362. data/vendor/board-maps/yaml/WATCHY_V10.yml +7 -0
  363. data/vendor/board-maps/yaml/WATCHY_V15.yml +7 -0
  364. data/vendor/board-maps/yaml/WATCHY_V20.yml +7 -0
  365. data/vendor/board-maps/yaml/WAVESHARE_RP2040_LCD_0_96.yml +47 -0
  366. data/vendor/board-maps/yaml/WAVESHARE_RP2040_LCD_1_28.yml +47 -0
  367. data/vendor/board-maps/yaml/WAVESHARE_RP2040_ONE.yml +47 -0
  368. data/vendor/board-maps/yaml/WAVESHARE_RP2040_PLUS.yml +48 -0
  369. data/vendor/board-maps/yaml/WAVESHARE_RP2040_ZERO.yml +47 -0
  370. data/vendor/board-maps/yaml/WESP32.yml +17 -0
  371. data/vendor/board-maps/yaml/WIDORA_AIR.yml +34 -0
  372. data/vendor/board-maps/yaml/WIFIDUINO_ESP8266.yml +23 -0
  373. data/vendor/board-maps/yaml/WIFINFO.yml +20 -0
  374. data/vendor/board-maps/yaml/WIPY3.yml +37 -0
  375. data/vendor/board-maps/yaml/WIZNET_5100S_EVB_PICO.yml +48 -0
  376. data/vendor/board-maps/yaml/WIZNET_5500_EVB_PICO.yml +48 -0
  377. data/vendor/board-maps/yaml/WIZNET_WIZFI360_EVB_PICO.yml +48 -0
  378. data/vendor/board-maps/yaml/WT32_ETH01.yml +8 -0
  379. data/vendor/board-maps/yaml/WiFiduino32S3.yml +27 -0
  380. data/vendor/board-maps/yaml/WiFiduinoV2.yml +27 -0
  381. data/vendor/board-maps/yaml/Wifiduino32.yml +40 -0
  382. data/vendor/board-maps/yaml/XIAO_ESP32C3.yml +22 -0
  383. data/vendor/board-maps/yaml/XIAO_ESP32S3.yml +37 -0
  384. data/vendor/board-maps/yaml/YD_RP2040.yml +48 -0
  385. data/vendor/board-maps/yaml/atmegazero_esp32s2.yml +30 -0
  386. data/vendor/board-maps/yaml/connaxio_espoir.yml +24 -0
  387. data/vendor/board-maps/yaml/esp32vn_iot_uno.yml +31 -0
  388. data/vendor/board-maps/yaml/fm_devkit.yml +15 -0
  389. data/vendor/board-maps/yaml/heltec_wifi_32_lora_V3.yml +41 -0
  390. data/vendor/board-maps/yaml/heltec_wifi_kit_32.yml +38 -0
  391. data/vendor/board-maps/yaml/heltec_wifi_kit_32_V3.yml +42 -0
  392. data/vendor/board-maps/yaml/heltec_wifi_lora_32.yml +36 -0
  393. data/vendor/board-maps/yaml/heltec_wifi_lora_32_V2.yml +36 -0
  394. data/vendor/board-maps/yaml/heltec_wireless_stick.yml +36 -0
  395. data/vendor/board-maps/yaml/heltec_wireless_stick_LITE.yml +36 -0
  396. data/vendor/board-maps/yaml/openkb.yml +37 -0
  397. data/vendor/board-maps/yaml/roboheart_hercules.yml +26 -0
  398. data/vendor/board-maps/yaml/sensesiot_weizen.yml +35 -0
  399. data/vendor/board-maps/yaml/uPesy_WROOM.yml +36 -0
  400. data/vendor/board-maps/yaml/uPesy_WROVER.yml +36 -0
  401. data/vendor/board-maps/yaml/unphone8.yml +42 -0
  402. data/vendor/board-maps/yaml/unphone9.yml +42 -0
  403. data/vendor/board-maps/yaml/wifi_kit_8.yml +15 -0
  404. metadata +385 -3
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: e165f677a5af1dc4d7a924e7b2387bafaca1c84c754b72eac8960fcea42117a7
4
- data.tar.gz: f1c795bff6917284d3b31fbff4d1ea44de78f2871492b466f45d9f36abc340af
3
+ metadata.gz: 7f77acd1d470ce9de71af4597293404801630e1a04bafa6cbb6f15a743ebbc90
4
+ data.tar.gz: a7edb3d9c2447b7dedc955cb2cbd03b9d0260180dc91ee2f3d6b9ee08623e59f
5
5
  SHA512:
6
- metadata.gz: c897cca6c4a59ce2fbd73e517c380ba272ad0c6a621a9ba7034dffe1f83e151c21cad0671df872443eff8376ff646933a0a68cda07e25860869a06a9306fcfac
7
- data.tar.gz: 6f90da47a6bb960400d9986668b2f9320248616f0a4f0a12a930e9ffda4dad0d75e1c08ecf8aae223f8882b72bd56e73dfe113a79c3973ff91c326c4ed31f941
6
+ metadata.gz: ca5b50ed73e0713839ff7281cc1cfd1ab9122e5506bb4f68bddbe3ac0051ad7c64931a95efeccfc025e23876abd817583a04775ec09f7163af3b7d5db470f600
7
+ data.tar.gz: 7900e8d43a1e224c62ad01a721e6ebd7168875816bb52b9f19e65185302348478a2716c7cfb7dd599f3e0acea73045809ebafcc3cee338ca57e6b15666bb8896
@@ -30,6 +30,7 @@ jobs:
30
30
  denko-target: esp32
31
31
  platforms: |
32
32
  - name: esp32:esp32
33
+ version: 2.0.17
33
34
  source-url: https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json
34
35
  libraries: |
35
36
  - name: IRremoteESP8266
data/CHANGELOG.md CHANGED
@@ -1,5 +1,21 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.13.5
4
+
5
+ ### New Components
6
+
7
+ - HC-SR04 Ultrasonic Distance Sensor:
8
+ - Class: `Denko::Sensor::HCSRO4`
9
+ - Custom function on the board to handle ping and response.
10
+ - Simple interface. `#read` returns a distance in mm.
11
+
12
+ ### Bug Fixes
13
+
14
+ - OTA updating now works on ESP32.
15
+ - Adjust ESP32 expected serial buffer sizes and acknowledge intervals to to be more reliable.
16
+ - Fixed a bug on Windows where submodules weren't being included in load path.
17
+ - Fixed a bug where the board could incorrectly report EEPROM_LENGTH as 0.
18
+
3
19
  ## 0.13.4
4
20
 
5
21
  ### New Components
@@ -37,7 +53,7 @@
37
53
 
38
54
  ### Bug Fixes
39
55
 
40
- - Fixed bug where `BMP280`` sensor class would not autoload.
56
+ - Fixed bug where `BMP280` sensor class would not autoload.
41
57
 
42
58
  ## 0.13.3
43
59
 
data/DEPS_CLI.md CHANGED
@@ -16,7 +16,7 @@ arduino-cli core install arduino:sam
16
16
  arduino-cli core install arduino:samd
17
17
  arduino-cli core install arduino:renesas_uno
18
18
  arduino-cli core install esp8266:esp8266
19
- arduino-cli core install esp32:esp32
19
+ arduino-cli core install esp32:esp32@2.0.17
20
20
  arduino-cli core install rp2040:rp2040
21
21
  arduino-cli lib install Servo
22
22
  arduino-cli lib install Ethernet
@@ -71,7 +71,7 @@ arduino-cli lib install "Adafruit NeoPixel"
71
71
  arduino-cli config init
72
72
  arduino-cli config add board_manager.additional_urls https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json
73
73
  arduino-cli core update-index
74
- arduino-cli core install esp32:esp32
74
+ arduino-cli core install esp32:esp32@2.0.17
75
75
  arduino-cli lib install ESP32Servo
76
76
  arduino-cli lib install IRremoteESP8266@2.8.5
77
77
  arduino-cli lib install "Adafruit NeoPixel"
data/DEPS_IDE.md CHANGED
@@ -33,7 +33,8 @@ All platforms will require libraries to be installed. To install a library do th
33
33
  Arduino SAMD Boards (32-bits ARM Cortex-M0+)
34
34
  Arduino UNO R4 Boards
35
35
  ESP8266 Boards
36
- ESP32 Boards
36
+ ESP32 Boards @ v2.0.17
37
+ Raspberry Pi Pico/RP2040
37
38
  ````
38
39
  * Libraries:
39
40
  ````
@@ -103,7 +104,7 @@ All platforms will require libraries to be installed. To install a library do th
103
104
  ````
104
105
  * Boards (latest version unless specified):
105
106
  ````
106
- ESP32 Boards
107
+ ESP32 Boards @ v2.0.17
107
108
  ````
108
109
  * Libraries (latest version unless specified):
109
110
  ````
@@ -119,7 +120,7 @@ All platforms will require libraries to be installed. To install a library do th
119
120
  ````
120
121
  * Boards:
121
122
  ````
122
- Raspberry Pi Pico/RP2040
123
+ Raspberry Pi Pico/RP2040
123
124
  ````
124
125
  * Libraries:
125
126
  ````
data/HARDWARE.md CHANGED
@@ -8,7 +8,7 @@
8
8
 
9
9
  | Chip | Status | Products | Notes |
10
10
  | :-------- | :------: | :--------------- |------ |
11
- | ATmega168 | :green_heart: | Duemilanove, Diecimila, Pro | Features omitted to save memory. `denko targets` for more info.
11
+ | ATmega168 | :green_heart: | Duemilanove, Diecimila, Pro | Omits features. `denko targets` for info.
12
12
  | ATmega328 | :green_heart: | Uno R3, Uno WiFi, Nano, Fio, Pro |
13
13
  | ATmega32u4 | :green_heart: | Leonardo, Micro, Leonardo ETH, Esplora, LilyPad USB |
14
14
  | ATmega1280 | :green_heart: | Mega |
@@ -24,7 +24,7 @@
24
24
 
25
25
  | Chip | Status | Products | Notes |
26
26
  | :-------- | :------: | :--------------- |------ |
27
- | ATSAM3X8E | :yellow_heart: | Due | Native USB port. Tone, and IR Out don't work.
27
+ | ATSAM3X8E | :yellow_heart: | Due | Uses Native USB. Tone and IR Out don't work.
28
28
  | ATSAMD21 | :green_heart: | Zero, M0 Series, Nano 33 IOT, MKR WiFi 1010 | Native USB
29
29
  | RA4M1 | :yellow_heart: | Uno R4 Minima, Uno R4 WiFi | IR and WS2812 libraries don't support this yet
30
30
 
@@ -55,6 +55,8 @@
55
55
  | ESP32-S2 | :green_heart: | LOLIN S2 Pico | Native USB
56
56
  | ESP32-S3 | :green_heart: | LOLIN S3 V1.0.0 | Native USB
57
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
58
60
 
59
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.
60
62
 
@@ -155,12 +157,13 @@ Polling and reading follow a call and response pattern.
155
157
  | :--------------- | :------: | :-------- | :--------------- |------ |
156
158
  | Generic Hobby Servo | :green_heart: | Servo/ESC PWM | `Motor::Servo` | Max depends on PWM channel count
157
159
  | Generic ESC | :yellow_heart: | Servo/ESC PWM | `Motor::Servo` | Works. Needs its own class.
158
- | PCA9685 | :heart: | I2C | `PulseIO::PCA9685` | 16ch 12-bit PWM for servo or LED
160
+ | PCA9685 | :heart: | I2C | `PulseIO::PCA9685` | 16-ch, 12-bit PWM for servo or LED
159
161
  | L298N | :green_heart: | Digi + PWM Out | `Motor::L298` | H-Bridge DC motor driver
160
162
  | DRV8833 | :heart: | Digi + PWM Out | `Motor::DRV8833` | H-Bridge DC motor driver
161
- | A3967 | :green_heart: | Digital Out | `Motor::Stepper` | 1ch microstepper (EasyDriver)
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)
162
165
  | A4988 | :yellow_heart: | DigitalOut | `Motor::Stepper` | 1-ch microstepper
163
- | TMC2209 | :heart: | - | - | 1ch silent stepper driver
166
+ | TMC2209 | :heart: | - | - | 1-ch silent stepper driver
164
167
 
165
168
  ### I/O Expansion
166
169
 
@@ -168,33 +171,38 @@ Polling and reading follow a call and response pattern.
168
171
  | :--------------- | :------: | :-------- | :--------------- |------ |
169
172
  | Input Register | :green_heart: | SPI | `SPI::InputRegister` | Tested on CD4021B
170
173
  | Output Register | :green_heart: | SPI | `SPI::OutputRegister`| Tested on 74HC595
171
- | PCF8574 Expander | :heart: | I2C | `DigitalIO::PCF8574` | 8ch bi-directional digital I/O
172
- | ADS1100 ADC | :heart: | I2C | `AnalogIO::ADS1100` | 15-bit +/- 1ch ADC
173
- | ADS1115 ADC | :green_heart: | I2C | `AnalogIO::ADS1115` | 15-bit +/- 4ch ADC. Comparator not implemented.
174
- | ADS1118 ADC | :green_heart: | SPI | `AnalogIO::ADS1118` | 15-bit +/- 4ch ADC + temperature
175
- | PCF8591 ADC/DAC | :heart: | I2C | `AnalogIO::PCF8591` | 4ch ADC + 1ch DAC, 8-bit resolution
176
- | MCP4725 DAC | :heart: | I2C | `AnalogIO::MCP4275` | 1ch 12-bit DAC
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
177
182
 
178
183
  ### Environmental Sensors
179
184
 
180
- | Name | Status | Interface | Component Class | Type | Notes |
181
- | :--------------- | :------: | :-------- | :--------------- |--------------- | ---------------------- |
182
- | MAX31850 | :heart: | OneWire | `Sensor::MAX31850` | Thermocouple |
183
- | MAX6675 | :heart: | SPI | `Sensor::MAX6675` | Thermocouple |
184
- | DS18B20 | :green_heart: | OneWire | `Sensor::DS18B20` | Temp |
185
- | DHT11/21/22 | :green_heart: | Digi In/Out | `Sensor::DHT` | Temp / RH |
186
- | SHT30/31/35 | :green_heart: | I2C | `Sensor::SHT3X` | Temp / RH | M5Stack ENV III, one-shot only
187
- | QMP6988 | :green_heart: | I2C | `Sensor::QMP6988` | Temp / Press | M5Stack ENV III
188
- | BMP180 | :green_heart: | I2C | `Sensor::BMP180` | Temp / Press |
189
- | BMP280 | :green_heart: | I2C | `Sensor::BMP280` | Temp / Press |
190
- | BME280 | :green_heart: | I2C | `Sensor::BME280` | Temp / Press / RH |
191
- | HTU21D | :green_heart: | I2C | `Sensor::HTU21D` | Temp / RH | No user register read
192
- | HTU31D | :green_heart: | I2C | `Sensor::HTU31D` | Temp / RH | No diagnostic read
193
- | AHT10/15 | :green_heart: | I2C | `Sensor::AHT10` | Temp / RH |
194
- | AHT20/21/25 | :green_heart: | I2C | `Sensor::AHT20` | Temp / RH |
195
- | ENS160 | :heart: | I2C | `Sensor::ENS160` | CO2e / TVOC / AQI |
196
- | AGS02MA | :heart: | I2C | `Sensor::AGS02MA` | TVOC |
197
- | SCD40 | :heart: | I2C | `Sensor::SDC40` | Temp / Press / CO2 |
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 |
198
206
 
199
207
  ### Light Sensors
200
208
 
@@ -208,13 +216,15 @@ Polling and reading follow a call and response pattern.
208
216
  | Name | Status | Interface | Component Class | Notes |
209
217
  | :--------------- | :------: | :-------- | :--------------- |------ |
210
218
  | HC-SR501 | :green_heart: | Digital In | `Sensor::GenericPIR` |
219
+ | HC-SR505 | :yellow_heart: | Digital In | `Sensor::GenericPIR` |
211
220
  | AS312 | :green_heart: | Digital In | `Sensor::GenericPIR` |
221
+ | AM312 | :yellow_heart: | Digital In | `Sensor::GenericPIR` |
212
222
 
213
223
  ### Distance Sensors
214
224
 
215
225
  | Name | Status | Interface | Component Class | Notes |
216
226
  | :--------------- | :------: | :-------- | :--------------- |------ |
217
- | HC-SR04 | :heart: | Digi In/Out | `Sensor::HCSR04` | Ultrasonic, 20-4000mm
227
+ | HC-SR04 | :green_heart: | Digi In/Out | `Sensor::HCSR04` | Ultrasonic, 20-4000mm
218
228
  | RCWL-9620 | :green_heart: | I2C | `Sensor::RCWL9260` | Ultrasonic, 20-4500mm
219
229
  | VL53L0X | :heart: | I2C | `Sensor::VL53L0X` | Laser, 30 - 1000mm
220
230
  | GP2Y0E03 | :heart: | I2C | `Sensor::GP2Y0E03` | Infrared, 40 - 500mm
@@ -226,6 +236,7 @@ Polling and reading follow a call and response pattern.
226
236
  | ADXL345 | :heart: | I2C | `Sensor::ADXL345` | Accelerometer
227
237
  | IT3205 | :heart: | I2C | `Sensor::IT3205` | Gyroscope
228
238
  | HMC5883L | :heart: | I2C | `Sensor::HMC5883L` | Compass
239
+ | MPU6050 | :heart: | I2C | `Sensor::MPU6050` | Gyro + Accelerometer
229
240
  | MPU6886 | :heart: | I2C | `Sensor::MPU6886` | Gyro + Accelerometer
230
241
  | BMI160 | :heart: | I2C | `Sensor::BMI160` | Gyro + Accelerometer
231
242
  | LSM6DS3 | :heart: | I2C | `Sensor:LSM6DS3` | Gyro + Accelerometer
data/README.md CHANGED
@@ -23,10 +23,10 @@ High-level abstraction in Ruby makes hardware classes easy to implement, with in
23
23
  Full list of supported mircocontroller platforms, interfaces, and peripherals is located [here](HARDWARE.md).
24
24
 
25
25
  ##### denko-piboard
26
- The add-on gem, [denko-piboard](https://github.com/denko-rb/denko-piboard), allows you to use a Raspberry Pi's built in GPIO pins in place of an attached microcontroller. Connect things directly to the Pi, and use the same peripheral classes from this gem.
26
+ The [denko-piboard](https://github.com/denko-rb/denko-piboard) add-on gem, uses a Raspberry Pi's built in GPIO header instead of an attached microcontroller. Connect things directly to the Pi, and use the peripheral classes from this gem.
27
27
 
28
28
  ##### mruby-denko
29
- A solo Raspberry Pi (or other small SBC + microcontroller) is a great standalone setup if your project needs the compute power anyway, but what if you don't? Why not run Ruby on the microcontroller itself?
29
+ A solo Raspberry Pi (or other SBC + microcontroller) is great if you need the compute power anyway, but what if you don't? Why not run Ruby on the microcontroller itself?
30
30
 
31
31
  That's the goal of [mruby-denko](https://github.com/denko-rb/mruby-denko): write mruby on the ESP32, using peripheral classes as close to this gem as possible. Still early in development, so limited features, but already usable.
32
32
 
@@ -30,6 +30,11 @@
30
30
  # Arduino Nano Every : 9.2 fps (USB through ATSAMD11 @ 115200, 128-byte I2C limit, no I2C level shifter)
31
31
  # Arduino Nano Every : 13.0 fps (USB through ATSAMD11 @ 230400, 128-byte I2C limit, no I2C level shifter)
32
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
+ #
33
38
  require 'bundler/setup'
34
39
  require 'denko'
35
40
 
data/denko.gemspec CHANGED
@@ -17,10 +17,10 @@ Gem::Specification.new do |gem|
17
17
  # get an array of submodule dirs by executing 'pwd' inside each submodule
18
18
  gem_dir = File.expand_path(File.dirname(__FILE__)) + "/"
19
19
  `git submodule --quiet foreach pwd`.split($\).each do |submodule_path|
20
- # Fix submodule paths on Windows.
21
- if RUBY_PLATFORM.match(/mswin|mingw/i)
22
- submodule_path = `cygpath -m #{submodule_path}`.strip
23
- end
20
+ # Fix submodule paths on Windows, by removing prepended / and drive letter.
21
+ if RUBY_PLATFORM.match(/mswin|mingw/i)
22
+ submodule_path = submodule_path[2..-1]
23
+ end
24
24
 
25
25
  Dir.chdir(submodule_path) do
26
26
  submodule_relative_path = submodule_path.sub gem_dir, ""
@@ -23,6 +23,8 @@ unless board.map
23
23
 
24
24
  # Else get defaults from map.
25
25
  else
26
+ puts "Detected board: #{board.name}"
27
+
26
28
  sda = board.map[:SDA] || board.map[:SDA0]
27
29
  scl = board.map[:SCL] || board.map[:SCL0]
28
30
 
@@ -0,0 +1,14 @@
1
+ #
2
+ # Example of reading an HC-SR04 ultrasonic sensor.
3
+ #
4
+ require 'bundler/setup'
5
+ require 'denko'
6
+
7
+ board = Denko::Board.new(Denko::Connection::Serial.new)
8
+ hcsr04 = Denko::Sensor::HCSR04.new(board: board, pins: {trigger: 6, echo: 7})
9
+
10
+ hcsr04.poll(0.05) do |distance|
11
+ puts "Distance: #{distance} mm"
12
+ end
13
+
14
+ sleep
@@ -22,5 +22,9 @@ module Denko
22
22
  value: settings,
23
23
  aux_message: aux
24
24
  end
25
+
26
+ def hcsr04_read(echo_pin, trigger_pin)
27
+ write Message.encode(command: 20, pin: echo_pin, value: trigger_pin)
28
+ end
25
29
  end
26
30
  end
data/lib/denko/board.rb CHANGED
@@ -110,6 +110,7 @@ module Denko
110
110
  # Component generating convenience methods. TODO: add more!
111
111
  #
112
112
  def eeprom
113
+ raise StandardError, 'board has no built-in EEPROM, or EEPROM disabled in sketch' if @eeprom_length == 0
113
114
  @eeprom ||= EEPROM::BuiltIn.new(board: self)
114
115
  end
115
116
  end
@@ -0,0 +1,33 @@
1
+ module Denko
2
+ module Sensor
3
+ class HCSR04
4
+ # Speed of sound in meters per second.
5
+ SPEED_OF_SOUND = 343.0
6
+
7
+ include Behaviors::MultiPin
8
+ include Behaviors::Poller
9
+
10
+ def initialize_pins(options={})
11
+ proxy_pin :trigger, DigitalIO::Output
12
+ proxy_pin :echo, DigitalIO::Input
13
+ end
14
+
15
+ def after_initialize(options={})
16
+ super(options)
17
+
18
+ # Receive values from echo pin.
19
+ echo.add_callback { |data| self.update(data) }
20
+ end
21
+
22
+ def _read
23
+ board.hcsr04_read(echo.pin, trigger.pin)
24
+ end
25
+
26
+ def pre_callback_filter(us)
27
+ # Data is microseconds roundtrip time. Convert to mm.
28
+ um = (us/2) * SPEED_OF_SOUND
29
+ mm = um / 1000.0
30
+ end
31
+ end
32
+ end
33
+ end
data/lib/denko/sensor.rb CHANGED
@@ -14,6 +14,7 @@ module Denko
14
14
  autoload :SHT3X, "#{__dir__}/sensor/sht3x"
15
15
  autoload :QMP6988, "#{__dir__}/sensor/qmp6988"
16
16
  autoload :RCWL9620, "#{__dir__}/sensor/rcwl9620"
17
+ autoload :HCSR04, "#{__dir__}/sensor/hcsr04"
17
18
  autoload :GenericPIR, "#{__dir__}/sensor/generic_pir"
18
19
  end
19
20
  end
data/lib/denko/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Denko
2
- VERSION = "0.13.4"
2
+ VERSION = "0.13.6"
3
3
  end
data/src/denko_wifi.ino CHANGED
@@ -30,8 +30,8 @@
30
30
  #elif defined(ESP32)
31
31
  #include <WiFi.h>
32
32
  #include <ESPmDNS.h>
33
- // #include <WiFiUdp.h>
34
- // #include <ArduinoOTA.h>
33
+ #include <WiFiUdp.h>
34
+ #include <ArduinoOTA.h>
35
35
  #define WIFI_STATUS_LED 2
36
36
  #else
37
37
  #define WIFI_STATUS_LED 13
@@ -48,13 +48,13 @@
48
48
  #endif
49
49
 
50
50
  // Configure your WiFi options here. IP address is not configurable. Uses DHCP.
51
- int port = 3466;
52
- char* ssid = "yourNetwork";
53
- char* pass = "yourPassword";
51
+ #define DENKO_TCP_PORT 3466
52
+ #define WIFI_SSID "yourNetwork"
53
+ #define WIFI_PASSWORD "yourPassword"
54
54
  boolean connected = false;
55
55
 
56
56
  Denko denko;
57
- WiFiServer server(port);
57
+ WiFiServer server(DENKO_TCP_PORT);
58
58
  WiFiClient client;
59
59
 
60
60
  // Use the built in LED to indicate WiFi status.
@@ -82,7 +82,7 @@ void printWifiStatus() {
82
82
  DENKO_SERIAL_IF.println(WiFi.localIP());
83
83
  #endif
84
84
  DENKO_SERIAL_IF.print("Denko TCP Port: ");
85
- DENKO_SERIAL_IF.println(port);
85
+ DENKO_SERIAL_IF.println(DENKO_TCP_PORT);
86
86
  indicateWiFi(true);
87
87
  }
88
88
 
@@ -94,7 +94,7 @@ void connect(){
94
94
 
95
95
  // Try to connect.
96
96
  DENKO_SERIAL_IF.print("Connecting to WiFi ");
97
- WiFi.begin(ssid, pass);
97
+ WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
98
98
 
99
99
  // Delay until connected.
100
100
  while (WiFi.status() != WL_CONNECTED) {
@@ -117,14 +117,39 @@ void setup() {
117
117
  DENKO_SERIAL_IF.begin(115200);
118
118
  while(!DENKO_SERIAL_IF);
119
119
 
120
- // Enable over the air updates on the ESP8266.
121
- #if defined(ESP8266)
120
+ // Attempt initial WiFi connection.
121
+ connect();
122
+
123
+ // Enable over the air updates on the ESP8266 and ESP32.
124
+ // Taken from standard ESP8266/ESP32 OTA examples.
125
+ #if defined(ESP8266) || (ESP32)
126
+ ArduinoOTA.onStart([]() {
127
+ String type;
128
+ if (ArduinoOTA.getCommand() == U_FLASH) {
129
+ type = "sketch";
130
+ } else { // U_FS (ESP8266) or U_SPIFFS (ESP32)
131
+ type = "filesystem";
132
+ }
133
+ // NOTE: if updating FS or SPIFFS, this would be the place to unmount using FS.end() or SPIFFS.end()
134
+ Serial.println("Arduino OTA: Start updating " + type);
135
+ });
136
+ ArduinoOTA.onEnd([]() {
137
+ Serial.println("\nArduino OTA: End\n");
138
+ });
139
+ ArduinoOTA.onProgress([](unsigned int progress, unsigned int total) {
140
+ Serial.printf("Progress: %u%%\r", (progress / (total / 100)));
141
+ });
142
+ ArduinoOTA.onError([](ota_error_t error) {
143
+ Serial.printf("Error[%u]: ", error);
144
+ if (error == OTA_AUTH_ERROR) Serial.println("Arduino OTA: Auth Failed");
145
+ else if (error == OTA_BEGIN_ERROR) Serial.println("Arduino OTA: Begin Failed");
146
+ else if (error == OTA_CONNECT_ERROR) Serial.println("Arduino OTA: Connect Failed");
147
+ else if (error == OTA_RECEIVE_ERROR) Serial.println("Arduino OTA: Receive Failed");
148
+ else if (error == OTA_END_ERROR) Serial.println("Arduino OTA: End Failed");
149
+ });
122
150
  ArduinoOTA.begin();
123
151
  #endif
124
152
 
125
- // Attempt initial WiFi connection.
126
- connect();
127
-
128
153
  // Start the denko TCP server.
129
154
  server.begin();
130
155
 
@@ -141,7 +166,7 @@ void loop() {
141
166
  maintainWiFi();
142
167
 
143
168
  // Handle OTA updates.
144
- #if defined(ESP8266)
169
+ #if defined(ESP8266) || (ESP32)
145
170
  ArduinoOTA.handle();
146
171
  #endif
147
172
 
data/src/lib/Denko.cpp CHANGED
@@ -3,6 +3,9 @@
3
3
  */
4
4
  #include "Denko.h"
5
5
  #include "BoardMap.h"
6
+ #ifdef DENKO_EEPROM
7
+ #include "EEPROM.h"
8
+ #endif
6
9
 
7
10
  Denko::Denko(){
8
11
  messageFragments[0] = cmdStr;
@@ -119,7 +122,8 @@ void Denko::process() {
119
122
  #endif
120
123
 
121
124
  // Implemented in DenkoPulseInput.cpp
122
- case 9: pulseRead (); break;
125
+ case 9: pulseRead (); break;
126
+ case 20: hcsr04Read (); break;
123
127
 
124
128
  // Implemented in DenkoServo.cpp
125
129
  #ifdef DENKO_SERVO
@@ -275,7 +279,7 @@ void Denko::handshake() {
275
279
  stream->print(',');
276
280
  #if defined(EEPROM_EMULATED)
277
281
  stream->print(EMULATED_EEPROM_LENGTH);
278
- #elif defined(EEPROM_PRESENT)
282
+ #elif defined(DENKO_EEPROM)
279
283
  stream->print(EEPROM.length());
280
284
  #endif
281
285
 
data/src/lib/Denko.h CHANGED
@@ -95,11 +95,13 @@ class Denko {
95
95
  void eepromRead (); //cmd = 7
96
96
  void eepromWrite (); //cmd = 8
97
97
 
98
- // Included Libraries
98
+ // Pulse inputs (DHT and HC-SR04)
99
99
  void pulseRead (); //cmd = 9
100
+ void hcsr04Read (); //cmd = 20
101
+
102
+ // Servos
100
103
  void servoToggle (); //cmd = 10
101
104
  void servoWrite (); //cmd = 11
102
- void handleSerial (); //cmd = 12
103
105
 
104
106
  // Single Bit Bang UART
105
107
  #ifdef DENKO_UART_BB
@@ -19,12 +19,14 @@ void Denko::setMode(byte p, byte m) {
19
19
  // 111 = Digital Input/Output (ESP32 Only?)
20
20
  m = m & 0b00000111;
21
21
 
22
- #if defined(ESP32) && defined(SOC_DAC_SUPPORTED)
23
- // Free the LEDC channel if leaving PWM mode.
22
+ #if defined(ESP32)
23
+ // Free the LEDC channel if leaving PWM mode.
24
24
  if (m != 0b010) releaseLEDC(p);
25
25
 
26
26
  // Disable attached DAC if leaving DAC mode.
27
- if (m != 0b100) dacDisable(p);
27
+ #if defined(SOC_DAC_SUPPORTED)
28
+ if (m != 0b100) dacDisable(p);
29
+ #endif
28
30
  #endif
29
31
 
30
32
  // On the SAMD21 and RA4M1, mode needs to be INPUT when using the DAC.
@@ -134,9 +134,24 @@
134
134
  // Best performance acknowledging at 64 bytes, or 32 if buffer is only 64.
135
135
  //
136
136
  // These are 256/64 regardless of whether native USB CDC or UART bridge.
137
- #if defined(ARDUINO_ARCH_RP2040) || defined(ESP32) || defined(ESP8266) || defined(__SAM3X8E__)
137
+ #if defined(ARDUINO_ARCH_RP2040) || defined(ESP8266) || defined(__SAM3X8E__)
138
138
  #define DENKO_SERIAL_BUFFER_SIZE 256
139
139
  #define DENKO_RX_ACK_INTERVAL 64
140
+ // ESP32 defaults to 256 buffer. Stay one under.
141
+ #elif defined(ESP32)
142
+ #define DENKO_SERIAL_BUFFER_SIZE 255
143
+ #ifdef ARDUINO_USB_CDC_ON_BOOT
144
+ // S2 unreliable with acknowledgement before buffer is full.
145
+ #ifdef CONFIG_IDF_TARGET_ESP32S2
146
+ #define DENKO_RX_ACK_INTERVAL 255
147
+ // S3 and C3 are fine acknowledging at half buffer filled.
148
+ #else
149
+ #define DENKO_RX_ACK_INTERVAL 128
150
+ #endif
151
+ // Default to 64 if using a UART bridge.
152
+ #else
153
+ #define DENKO_RX_ACK_INTERVAL 64
154
+ #endif
140
155
  // RA4M1 has a 512 Serial buffer.
141
156
  #elif defined(_RENESAS_RA_)
142
157
  #define DENKO_SERIAL_BUFFER_SIZE 512
@@ -31,7 +31,7 @@ void Denko::showLEDArray() {
31
31
 
32
32
  // ATmega4809 still needs this delay to avoid corrupt data. Not sure why.
33
33
  #if defined(__AVR_ATmega4809__)
34
- delayMicroseconds(64);
34
+ microDelay(64);
35
35
  #endif
36
36
 
37
37
  // Write the pixel buffer to the array.
@@ -27,7 +27,7 @@ void Denko::pulseRead(){
27
27
  uint16_t resetTime = (auxMsg[1] << 8) | auxMsg[0];
28
28
  pinMode(pin, OUTPUT);
29
29
  digitalWrite(pin, bitRead(val, 1));
30
- delayMicroseconds(resetTime);
30
+ microDelay(resetTime);
31
31
  }
32
32
  pinMode(pin, INPUT);
33
33
  byte state = digitalRead(pin);
@@ -55,3 +55,34 @@ void Denko::pulseRead(){
55
55
  }
56
56
  if (pulseCount == 0) stream->print('\n');
57
57
  }
58
+
59
+ // CMD = 20
60
+ //
61
+ // pin : echo pin
62
+ // val (lower 8 bits) : trigger pin
63
+ //
64
+ void Denko::hcsr04Read(){
65
+ // Store number of microseconds to return.
66
+ uint32_t us;
67
+
68
+ // Ensure pins are correct direction.
69
+ // This is handled by modeling the sensor as a multipin component instead.
70
+ // pinMode(pin, INPUT);
71
+ // pinMode(val, OUTPUT);
72
+
73
+ // Initial pulse on the triger pin.
74
+ digitalWrite(val, LOW);
75
+ microDelay(2);
76
+ digitalWrite(val,HIGH);
77
+ microDelay(10);
78
+ digitalWrite(val,LOW);
79
+
80
+ // Wait for the echo, up to 25,000 microseconds.
81
+ us = pulseIn(pin, HIGH, 25000);
82
+
83
+ // Send value.
84
+ stream->print(pin);
85
+ stream->print(':');
86
+ stream->print(us);
87
+ stream->print('\n');
88
+ }