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.
- checksums.yaml +4 -4
- data/.github/workflows/{build_avr.yml → build_atmega_avr.yml} +19 -18
- data/.github/workflows/{build_megaavr.yml → build_atmega_megaavr.yml} +19 -18
- data/.github/workflows/{build_sam3x.yml → build_atsam3x.yml} +18 -17
- data/.github/workflows/{build_samd.yml → build_atsamd21.yml} +19 -18
- data/.github/workflows/build_esp32.yml +19 -18
- data/.github/workflows/build_esp32c3.yml +58 -0
- data/.github/workflows/build_esp32c6.yml +59 -0
- data/.github/workflows/build_esp32h2.yml +58 -0
- data/.github/workflows/build_esp32s2.yml +59 -0
- data/.github/workflows/build_esp32s3.yml +59 -0
- data/.github/workflows/build_esp8266.yml +16 -15
- data/.github/workflows/build_ra4m1.yml +17 -16
- data/.github/workflows/build_rp2040.yml +19 -17
- data/.github/workflows/ruby.yml +20 -20
- data/CHANGELOG.md +398 -11
- data/DEPS_CLI.md +16 -16
- data/DEPS_IDE.md +39 -39
- data/MICROCONTROLLERS.md +103 -0
- data/PERIPHERALS.md +178 -0
- data/README.md +73 -58
- data/Rakefile +1 -1
- data/build +1 -1
- data/denko.gemspec +11 -3
- data/lib/denko/analog_io/ads1100.rb +127 -0
- data/lib/denko/analog_io/ads1115.rb +8 -25
- data/lib/denko/analog_io/ads1118.rb +12 -27
- data/lib/denko/analog_io/ads111x.rb +39 -21
- data/lib/denko/analog_io/input.rb +29 -55
- data/lib/denko/analog_io/input_helper.rb +42 -0
- data/lib/denko/analog_io/joystick.rb +87 -0
- data/lib/denko/analog_io/output.rb +5 -5
- data/lib/denko/analog_io/potentiometer.rb +3 -9
- data/lib/denko/analog_io.rb +22 -7
- data/lib/denko/behaviors/board_proxy.rb +13 -1
- data/lib/denko/behaviors/bus_controller.rb +3 -1
- data/lib/denko/behaviors/bus_controller_addressed.rb +1 -0
- data/lib/denko/behaviors/bus_peripheral.rb +3 -4
- data/lib/denko/behaviors/bus_peripheral_addressed.rb +8 -6
- data/lib/denko/behaviors/callbacks.rb +18 -14
- data/lib/denko/behaviors/component.rb +12 -14
- data/lib/denko/behaviors/input_pin.rb +14 -15
- data/lib/denko/behaviors/lifecycle.rb +51 -0
- data/lib/denko/behaviors/listener.rb +9 -3
- data/lib/denko/behaviors/multi_pin.rb +22 -20
- data/lib/denko/behaviors/output_pin.rb +9 -4
- data/lib/denko/behaviors/poller.rb +11 -2
- data/lib/denko/behaviors/reader.rb +109 -21
- data/lib/denko/behaviors/single_pin.rb +3 -4
- data/lib/denko/behaviors/state.rb +24 -13
- data/lib/denko/behaviors/subcomponents.rb +72 -12
- data/lib/denko/behaviors/threaded.rb +19 -8
- data/lib/denko/behaviors.rb +36 -22
- data/lib/denko/board/core.rb +36 -18
- data/lib/denko/board/eeprom.rb +1 -1
- data/lib/denko/board/i2c.rb +15 -15
- data/lib/denko/board/i2c_bit_bang.rb +53 -0
- data/lib/denko/board/infrared.rb +6 -6
- data/lib/denko/board/led_array.rb +6 -5
- data/lib/denko/board/map.rb +6 -2
- data/lib/denko/board/one_wire.rb +3 -3
- data/lib/denko/board/spi.rb +35 -30
- data/lib/denko/board/spi_bit_bang.rb +14 -15
- data/lib/denko/board.rb +41 -36
- data/lib/denko/connection/binary_echo.rb +17 -0
- data/lib/denko/connection/flow_control.rb +12 -16
- data/lib/denko/connection/handshake.rb +2 -0
- data/lib/denko/connection/serial.rb +5 -5
- data/lib/denko/digital_io/button.rb +4 -0
- data/lib/denko/digital_io/c_bit_bang.rb +15 -0
- data/lib/denko/digital_io/input.rb +4 -5
- data/lib/denko/digital_io/output.rb +19 -10
- data/lib/denko/digital_io/pcf8574.rb +114 -0
- data/lib/denko/digital_io/relay.rb +2 -0
- data/lib/denko/digital_io/rotary_encoder.rb +83 -61
- data/lib/denko/digital_io.rb +24 -5
- data/lib/denko/display/canvas.rb +350 -157
- data/lib/denko/display/font/bmp_5x7.rb +142 -0
- data/lib/denko/display/font/bmp_6x8.rb +142 -0
- data/lib/denko/display/font/bmp_8x16.rb +141 -0
- data/lib/denko/display/font.rb +22 -0
- data/lib/denko/display/hd44780.rb +152 -105
- data/lib/denko/display/il0373.rb +186 -0
- data/lib/denko/display/mono_oled.rb +193 -0
- data/lib/denko/display/pcd8544.rb +154 -0
- data/lib/denko/display/pixel_common.rb +83 -0
- data/lib/denko/display/sh1106.rb +38 -0
- data/lib/denko/display/sh1107.rb +10 -0
- data/lib/denko/display/spi_common.rb +35 -0
- data/lib/denko/display/spi_epaper_common.rb +30 -0
- data/lib/denko/display/ssd1306.rb +6 -168
- data/lib/denko/display/ssd1680.rb +14 -0
- data/lib/denko/display/ssd1681.rb +8 -0
- data/lib/denko/display/ssd168x.rb +227 -0
- data/lib/denko/display/st7302.rb +207 -0
- data/lib/denko/display/st7565.rb +166 -0
- data/lib/denko/display.rb +40 -3
- data/lib/denko/eeprom/at24c.rb +67 -0
- data/lib/denko/eeprom/board.rb +69 -0
- data/lib/denko/eeprom.rb +15 -1
- data/lib/denko/helpers/engine_check.rb +13 -0
- data/lib/denko/helpers/mutex_stub.rb +13 -0
- data/lib/denko/helpers.rb +6 -0
- data/lib/denko/i2c/bit_bang.rb +32 -0
- data/lib/denko/i2c/bus.rb +8 -36
- data/lib/denko/i2c/bus_common.rb +50 -0
- data/lib/denko/i2c/peripheral.rb +32 -19
- data/lib/denko/i2c.rb +17 -2
- data/lib/denko/led/apa102.rb +42 -30
- data/lib/denko/led/base.rb +13 -2
- data/lib/denko/led/rgb.rb +18 -14
- data/lib/denko/led/seven_segment.rb +24 -9
- data/lib/denko/led/ws2812.rb +10 -7
- data/lib/denko/led.rb +17 -8
- data/lib/denko/message.rb +5 -0
- data/lib/denko/motor/{stepper.rb → a3967.rb} +12 -15
- data/lib/denko/motor/l298.rb +11 -10
- data/lib/denko/motor/servo.rb +37 -15
- data/lib/denko/motor.rb +16 -3
- data/lib/denko/one_wire/bus.rb +31 -23
- data/lib/denko/one_wire/bus_enumerator.rb +25 -14
- data/lib/denko/one_wire/helper.rb +4 -2
- data/lib/denko/one_wire/peripheral.rb +0 -3
- data/lib/denko/one_wire.rb +18 -5
- data/lib/denko/pulse_io/buzzer.rb +11 -9
- data/lib/denko/pulse_io/{ir_transmitter.rb → ir_output.rb} +6 -5
- data/lib/denko/pulse_io/pwm_output.rb +94 -15
- data/lib/denko/pulse_io.rb +17 -3
- data/lib/denko/rtc/ds3231.rb +13 -14
- data/lib/denko/rtc.rb +14 -1
- data/lib/denko/sensor/aht.rb +35 -38
- data/lib/denko/sensor/bme280.rb +76 -92
- data/lib/denko/sensor/bmp180.rb +46 -48
- data/lib/denko/sensor/dht.rb +34 -7
- data/lib/denko/sensor/ds18b20.rb +41 -34
- data/lib/denko/sensor/hcsr04.rb +7 -5
- data/lib/denko/sensor/hdc1080.rb +174 -0
- data/lib/denko/sensor/helper.rb +37 -0
- data/lib/denko/sensor/htu21d.rb +57 -57
- data/lib/denko/sensor/htu31d.rb +36 -36
- data/lib/denko/sensor/jsnsr04t.rb +49 -0
- data/lib/denko/sensor/qmp6988.rb +34 -48
- data/lib/denko/sensor/rcwl9620.rb +3 -5
- data/lib/denko/sensor/sht3x.rb +27 -24
- data/lib/denko/sensor/sht4x.rb +125 -0
- data/lib/denko/sensor/vl53l0x.rb +58 -0
- data/lib/denko/sensor.rb +33 -16
- data/lib/denko/spi/base_register.rb +25 -21
- data/lib/denko/spi/bit_bang.rb +17 -51
- data/lib/denko/spi/bus.rb +15 -29
- data/lib/denko/spi/bus_common.rb +33 -0
- data/lib/denko/spi/input_register.rb +37 -31
- data/lib/denko/spi/output_register.rb +33 -39
- data/lib/denko/spi/peripheral.rb +81 -14
- data/lib/denko/spi.rb +21 -6
- data/lib/denko/uart/bit_bang.rb +7 -30
- data/lib/denko/uart/common.rb +33 -0
- data/lib/denko/uart/hardware.rb +10 -34
- data/lib/denko/uart.rb +16 -2
- data/lib/denko/version.rb +1 -1
- data/lib/denko.rb +23 -16
- data/lib/denko_cli/generator.rb +2 -2
- data/lib/denko_cli/packages.rb +8 -10
- data/lib/denko_cli/targets.rb +13 -13
- data/lib/denko_cli/targets.txt +23 -24
- data/lib/denko_cli/usage.txt +1 -1
- data/src/denko_ethernet.ino +0 -14
- data/src/denko_serial.ino +0 -14
- data/src/denko_wifi.ino +6 -15
- data/src/lib/Denko.cpp +65 -16
- data/src/lib/Denko.h +46 -30
- data/src/lib/DenkoCoreIO.cpp +57 -102
- data/src/lib/DenkoDefines.h +32 -46
- data/src/lib/DenkoI2C.cpp +54 -45
- data/src/lib/DenkoI2CBB.cpp +238 -0
- data/src/lib/DenkoIROut.cpp +12 -7
- data/src/lib/DenkoLEDArray.cpp +29 -13
- data/src/lib/DenkoSPI.cpp +36 -33
- data/src/lib/DenkoSPIBB.cpp +19 -20
- data/target.yml +37 -2
- data/test/analog_io/input_test.rb +1 -1
- data/test/analog_io/potentiometer_test.rb +12 -12
- data/test/behaviors/board_proxy_test.rb +1 -1
- data/test/behaviors/bus_peripheral_test.rb +4 -4
- data/test/behaviors/callbacks_test.rb +28 -10
- data/test/behaviors/component_test.rb +32 -14
- data/test/behaviors/input_pin_test.rb +14 -9
- data/test/behaviors/multi_pin_test.rb +14 -4
- data/test/behaviors/output_pin_test.rb +11 -8
- data/test/behaviors/poller_test.rb +1 -0
- data/test/behaviors/reader_test.rb +3 -2
- data/test/behaviors/subcomponents_test.rb +22 -2
- data/test/board/board_test.rb +9 -9
- data/test/board/core_test.rb +15 -11
- data/test/board/i2c_test.rb +39 -33
- data/test/board/infrared_test.rb +1 -1
- data/test/board/message_test.rb +17 -11
- data/test/board/one_wire_test.rb +25 -14
- data/test/board/spi_test.rb +45 -29
- data/test/digital_io/button_test.rb +15 -0
- data/test/digital_io/input_test.rb +2 -2
- data/test/digital_io/relay_test.rb +18 -0
- data/test/digital_io/rotary_encoder_test.rb +80 -60
- data/test/display/canvas_test.rb +306 -0
- data/test/display/hd44780_test.rb +34 -7
- data/test/eeprom/board_test.rb +45 -0
- data/test/helpers/mruby_minitest.rb +95 -0
- data/test/helpers/mruby_runner.rb +13 -0
- data/test/i2c/bus_test.rb +108 -29
- data/test/i2c/peripheral_test.rb +38 -19
- data/test/led/apa102_test.rb +24 -0
- data/test/led/base_test.rb +2 -1
- data/test/led/rgb_test.rb +9 -9
- data/test/led/seven_segment_test.rb +7 -7
- data/test/motor/{stepper_test.rb → a3967_test.rb} +4 -4
- data/test/motor/servo_test.rb +1 -1
- data/test/one_wire/bus_enumerator_test.rb +1 -1
- data/test/one_wire/bus_test.rb +43 -35
- data/test/one_wire/peripheral_test.rb +5 -17
- data/test/pulse_io/buzzer_test.rb +7 -4
- data/test/pulse_io/{ir_transmitter_test.rb → ir_output_test.rb} +15 -10
- data/test/pulse_io/pwm_output_test.rb +74 -18
- data/test/rtc/ds3231_test.rb +13 -14
- data/test/sensor/dht_test.rb +12 -12
- data/test/sensor/ds18b20_test.rb +4 -8
- data/test/spi/bitbang_test.rb +27 -0
- data/test/spi/bus_test.rb +24 -34
- data/test/spi/input_register_test.rb +17 -17
- data/test/spi/output_register_test.rb +10 -28
- data/test/spi/peripheral_test.rb +73 -0
- data/test/test_helper.rb +44 -121
- data/vendor/board-maps/BoardMap.h +678 -54
- data/vendor/board-maps/lib/header_parser.rb +12 -2
- data/vendor/board-maps/yaml/ADAFRUIT_CAMERA_ESP32S3.yml +2 -2
- data/vendor/board-maps/yaml/ADAFRUIT_FEATHER_ESP32C6.yml +15 -0
- data/vendor/board-maps/yaml/ADAFRUIT_FEATHER_ESP32_V2.yml +1 -1
- data/vendor/board-maps/yaml/ADAFRUIT_FEATHER_RP2040_ADALOGGER.yml +44 -0
- data/vendor/board-maps/yaml/ADAFRUIT_QTPY_ESP32C3.yml +1 -0
- data/vendor/board-maps/yaml/ADAFRUIT_QTPY_ESP32S2.yml +1 -0
- data/vendor/board-maps/yaml/ADAFRUIT_QTPY_ESP32S3_N4R2.yml +1 -0
- data/vendor/board-maps/yaml/ADAFRUIT_QTPY_ESP32S3_NOPSRAM.yml +1 -0
- data/vendor/board-maps/yaml/ADAFRUIT_QTPY_ESP32_PICO.yml +1 -0
- data/vendor/board-maps/yaml/ALFREDO_NOU3.yml +2 -0
- data/vendor/board-maps/yaml/AMKEN_BB.yml +48 -0
- data/vendor/board-maps/yaml/AMKEN_ES.yml +48 -0
- data/vendor/board-maps/yaml/AMKEN_REVELOP.yml +48 -0
- data/vendor/board-maps/yaml/AMKEN_REVELOP_PLUS.yml +48 -0
- data/vendor/board-maps/yaml/ASL_CAN_X2.yml +41 -0
- data/vendor/board-maps/yaml/ATD143_S3.yml +1 -0
- data/vendor/board-maps/yaml/BHARATPI_A7672S_4G.yml +14 -0
- data/vendor/board-maps/yaml/BHARATPI_LORA.yml +14 -0
- data/vendor/board-maps/yaml/BHARATPI_NODE_WIFI.yml +14 -0
- data/vendor/board-maps/yaml/BLING.yml +25 -0
- data/vendor/board-maps/yaml/BRIDGETEK_IDM2040_7A.yml +48 -0
- data/vendor/board-maps/yaml/Bee_Motion_Mini.yml +13 -1
- data/vendor/board-maps/yaml/Breadstick_Raspberry.yml +31 -0
- data/vendor/board-maps/yaml/CEZERIO_DEV_ESP32C6.yml +14 -0
- data/vendor/board-maps/yaml/CEZERIO_MINI_DEV_ESP32C6.yml +12 -0
- data/vendor/board-maps/yaml/CIRCUITART_ZERO_S3.yml +71 -0
- data/vendor/board-maps/yaml/CODECELLC3.yml +13 -0
- data/vendor/board-maps/yaml/CYOBOT_V2_ESP32S3.yml +7 -0
- data/vendor/board-maps/yaml/DFROBOT_BEETLE_ESP32C6.yml +8 -0
- data/vendor/board-maps/yaml/DFROBOT_FIREBEETLE_2_ESP32C6.yml +20 -0
- data/vendor/board-maps/yaml/DFROBOT_FIREBEETLE_ESP32.yml +46 -0
- data/vendor/board-maps/yaml/DPTECHNICS_WALTER.yml +39 -0
- data/vendor/board-maps/yaml/EDGES3D.yml +25 -0
- data/vendor/board-maps/yaml/ELECROW_CROWPANEL_7.yml +8 -0
- data/vendor/board-maps/yaml/ESP32C2_DEV.yml +12 -0
- data/vendor/board-maps/yaml/ESP32C3_DEVKIT_LIPO.yml +14 -0
- data/vendor/board-maps/yaml/ESP32C6_DEV.yml +14 -0
- data/vendor/board-maps/yaml/ESP32C6_EVB.yml +15 -0
- data/vendor/board-maps/yaml/ESP32C6_QWIIC_POCKET.yml +15 -0
- data/vendor/board-maps/yaml/ESP32C6_THING_PLUS.yml +14 -0
- data/vendor/board-maps/yaml/ESP32H2_DEV.yml +12 -0
- data/vendor/board-maps/yaml/ESP32H2_DEVKIT_LIPO.yml +12 -0
- data/vendor/board-maps/yaml/ESP32P4_DEV.yml +35 -0
- data/vendor/board-maps/yaml/{RMP.yml → ESP32S2_DEVKIT_LIPO.yml} +1 -1
- data/vendor/board-maps/yaml/ESP32S2_DEVKIT_LIPO_USB.yml +43 -0
- data/vendor/board-maps/yaml/ESP32S3_DEVKIT_LIPO.yml +42 -0
- data/vendor/board-maps/yaml/ESP32S3_POWERFEATHER.yml +22 -0
- data/vendor/board-maps/yaml/ESP32_2432S028R.yml +14 -0
- data/vendor/board-maps/yaml/ESP32_SBC_FABGL.yml +35 -0
- data/vendor/board-maps/yaml/EVN_ALPHA.yml +48 -0
- data/vendor/board-maps/yaml/FEATHERS3.yml +1 -1
- data/vendor/board-maps/yaml/FEATHERS3NEO.yml +32 -0
- data/vendor/board-maps/yaml/FRI3D_2024_ESP32S3.yml +43 -0
- data/vendor/board-maps/yaml/GEEKBLE_ESP32C3.yml +13 -0
- data/vendor/board-maps/yaml/GEEKBLE_NANO_ESP32S3.yml +25 -0
- data/vendor/board-maps/yaml/HELTEC_CAPSULE_SENSOR_V3.yml +43 -0
- data/vendor/board-maps/yaml/HELTEC_VISION_MASTER_E290.yml +41 -0
- data/vendor/board-maps/yaml/HELTEC_VISION_MASTER_E_213.yml +41 -0
- data/vendor/board-maps/yaml/HELTEC_VISION_MASTER_T190.yml +41 -0
- data/vendor/board-maps/yaml/HELTEC_WIFI_LORA_32_V3.yml +42 -0
- data/vendor/board-maps/yaml/HELTEC_WIRELESS_BRIDGE.yml +8 -0
- data/vendor/board-maps/yaml/HELTEC_WIRELESS_MINI_SHELL.yml +13 -0
- data/vendor/board-maps/yaml/HELTEC_WIRELESS_PAPER.yml +42 -0
- data/vendor/board-maps/yaml/HELTEC_WIRELESS_SHELL_V3.yml +42 -0
- data/vendor/board-maps/yaml/HELTEC_WIRELESS_STICK_LITE_V3.yml +30 -0
- data/vendor/board-maps/yaml/HELTEC_WIRELESS_TRACKER.yml +41 -0
- data/vendor/board-maps/yaml/HT_DE01.yml +42 -0
- data/vendor/board-maps/yaml/HUIDU_HD_WF2.yml +5 -0
- data/vendor/board-maps/yaml/HUIDU_HD_WF4.yml +1 -0
- data/vendor/board-maps/yaml/IMBRIOS_LOGSENS_V1P1.yml +1 -1
- data/vendor/board-maps/yaml/LILYGO_LORA_CC1101.yml +6 -0
- data/vendor/board-maps/yaml/LILYGO_LORA_LR1121.yml +6 -0
- data/vendor/board-maps/yaml/LILYGO_LORA_SI4432.yml +6 -0
- data/vendor/board-maps/yaml/LILYGO_LORA_SX1262.yml +6 -0
- data/vendor/board-maps/yaml/LILYGO_LORA_SX1280.yml +6 -0
- data/vendor/board-maps/yaml/LILYGO_T3S3_LR1121.yml +9 -0
- data/vendor/board-maps/yaml/LILYGO_T3S3_SX1262.yml +9 -0
- data/vendor/board-maps/yaml/LILYGO_T3S3_SX1276.yml +9 -0
- data/vendor/board-maps/yaml/LILYGO_T3S3_SX1278.yml +9 -0
- data/vendor/board-maps/yaml/LILYGO_T3S3_SX1280.yml +9 -0
- data/vendor/board-maps/yaml/LILYGO_T3S3_SX1280PA.yml +8 -0
- data/vendor/board-maps/yaml/LILYGO_T_ETH_LITE.yml +21 -0
- data/vendor/board-maps/yaml/LOLIN_C3_MINI.yml +0 -1
- data/vendor/board-maps/yaml/LOLIN_C3_PICO.yml +13 -0
- data/vendor/board-maps/yaml/LOLIN_S3.yml +1 -0
- data/vendor/board-maps/yaml/LOLIN_S3_MINI_PRO.yml +40 -0
- data/vendor/board-maps/yaml/Lion_Bit_Dev_Board.yml +0 -2
- data/vendor/board-maps/yaml/M5STACK_CAPSULE.yml +8 -0
- data/vendor/board-maps/yaml/M5STACK_CARDPUTER.yml +8 -0
- data/vendor/board-maps/yaml/M5STACK_DIAL.yml +8 -0
- data/vendor/board-maps/yaml/M5STACK_DINMETER.yml +8 -0
- data/vendor/board-maps/yaml/M5STACK_FIRE.yml +1 -2
- data/vendor/board-maps/yaml/M5STACK_NANOC6.yml +17 -0
- data/vendor/board-maps/yaml/M5STACK_PAPER.yml +9 -0
- data/vendor/board-maps/yaml/M5STACK_POE_CAM.yml +5 -0
- data/vendor/board-maps/yaml/M5STACK_STAMP_C3.yml +13 -0
- data/vendor/board-maps/yaml/M5STACK_STAMP_S3.yml +4 -0
- data/vendor/board-maps/yaml/{M5Stick_C.yml → M5STACK_STICKC.yml} +0 -1
- data/vendor/board-maps/yaml/M5STACK_STICKC_PLUS.yml +9 -0
- data/vendor/board-maps/yaml/M5STACK_STICKC_PLUS2.yml +9 -0
- data/vendor/board-maps/yaml/M5STACK_TOUGH.yml +9 -0
- data/vendor/board-maps/yaml/M5STACK_UNIT_CAM.yml +10 -0
- data/vendor/board-maps/yaml/M5STACK_UNIT_CAMS3.yml +4 -0
- data/vendor/board-maps/yaml/M5Stack_ATOM.yml +0 -1
- data/vendor/board-maps/yaml/MAKERGO_C3_SUPERMINI.yml +14 -0
- data/vendor/board-maps/yaml/MARBLE_PICO.yml +48 -0
- data/vendor/board-maps/yaml/METEHOCA_AKANA_R1.yml +46 -0
- data/vendor/board-maps/yaml/NAMINO_BIANCO.yml +13 -0
- data/vendor/board-maps/yaml/NEBULAS3.yml +0 -1
- data/vendor/board-maps/yaml/NEWSAN_ARCHI.yml +48 -0
- data/vendor/board-maps/yaml/NOLOGO_ESP32C3_SUPER_MINI.yml +14 -0
- data/vendor/board-maps/yaml/NOLOGO_ESP32S3_PICO.yml +12 -0
- data/vendor/board-maps/yaml/OLIMEX_RP2040_PICO30_16MB.yml +48 -0
- data/vendor/board-maps/yaml/OLIMEX_RP2040_PICO30_2MB.yml +48 -0
- data/vendor/board-maps/yaml/OMGS3.yml +25 -0
- data/vendor/board-maps/yaml/OPTA_ANALOG.yml +7 -0
- data/vendor/board-maps/yaml/OPTA_DIGITAL.yml +5 -0
- data/vendor/board-maps/yaml/PCBCUPID_GLYPHC3.yml +23 -0
- data/vendor/board-maps/yaml/PCBCUPID_GLYPHC6.yml +32 -0
- data/vendor/board-maps/yaml/PCBCUPID_GLYPHH2.yml +24 -0
- data/vendor/board-maps/yaml/PINTRONIX_PINMAX.yml +42 -0
- data/vendor/board-maps/yaml/REDPILL_ESP32S3.yml +0 -1
- data/vendor/board-maps/yaml/SENSEBOX_MCU_ESP32S2.yml +12 -0
- data/vendor/board-maps/yaml/SPARKFUN_ESP32S3_THING_PLUS.yml +13 -0
- data/vendor/board-maps/yaml/SPARKFUN_MICROMOD_RP2040.yml +48 -0
- data/vendor/board-maps/yaml/SPARKFUN_PRO_MICRO_ESP32C3.yml +24 -0
- data/vendor/board-maps/yaml/SPARKLEMOTIONMINI_ESP32.yml +12 -0
- data/vendor/board-maps/yaml/SPARKLEMOTIONSTICK_ESP32.yml +11 -0
- data/vendor/board-maps/yaml/SPARKLEMOTION_ESP32.yml +12 -0
- data/vendor/board-maps/yaml/SQUIXL.yml +7 -0
- data/vendor/board-maps/yaml/THINGPULSE_EPULSE_FEATHER.yml +31 -0
- data/vendor/board-maps/yaml/THINGPULSE_EPULSE_FEATHER_C6.yml +14 -0
- data/vendor/board-maps/yaml/TINYC6.yml +25 -0
- data/vendor/board-maps/yaml/T_LORA_PAGER.yml +6 -0
- data/vendor/board-maps/yaml/T_WATCH_S3.yml +7 -0
- data/vendor/board-maps/yaml/T_WATCH_S3_ULTRA.yml +6 -0
- data/vendor/board-maps/yaml/UPESY_EDU_ESP32.yml +28 -0
- data/vendor/board-maps/yaml/UPESY_ESP32C3_BASIC.yml +13 -0
- data/vendor/board-maps/yaml/UPESY_ESP32C3_MINI.yml +12 -0
- data/vendor/board-maps/yaml/UPESY_ESP32S3_BASIC.yml +42 -0
- data/vendor/board-maps/yaml/VIRALINK_GATE32_01.yml +6 -0
- data/vendor/board-maps/yaml/VIRALINK_GATE32_11.yml +7 -0
- data/vendor/board-maps/yaml/WAVESHARE_ESP32S3_TOUCH_LCD_128.yml +8 -0
- data/vendor/board-maps/yaml/WAVESHARE_ESP32_S3_LCD_146.yml +41 -0
- data/vendor/board-maps/yaml/WAVESHARE_ESP32_S3_LCD_147.yml +41 -0
- data/vendor/board-maps/yaml/WAVESHARE_ESP32_S3_LCD_169.yml +38 -0
- data/vendor/board-maps/yaml/WAVESHARE_ESP32_S3_LCD_185.yml +41 -0
- data/vendor/board-maps/yaml/WAVESHARE_ESP32_S3_RELAY_6CH.yml +41 -0
- data/vendor/board-maps/yaml/WAVESHARE_ESP32_S3_TOUCH_AMOLED_143.yml +7 -0
- data/vendor/board-maps/yaml/WAVESHARE_ESP32_S3_TOUCH_AMOLED_164.yml +7 -0
- data/vendor/board-maps/yaml/WAVESHARE_ESP32_S3_TOUCH_AMOLED_18.yml +38 -0
- data/vendor/board-maps/yaml/WAVESHARE_ESP32_S3_TOUCH_AMOLED_191.yml +7 -0
- data/vendor/board-maps/yaml/WAVESHARE_ESP32_S3_TOUCH_AMOLED_241.yml +7 -0
- data/vendor/board-maps/yaml/WAVESHARE_ESP32_S3_TOUCH_LCD_146.yml +41 -0
- data/vendor/board-maps/yaml/WAVESHARE_ESP32_S3_TOUCH_LCD_169.yml +38 -0
- data/vendor/board-maps/yaml/WAVESHARE_ESP32_S3_TOUCH_LCD_185.yml +41 -0
- data/vendor/board-maps/yaml/WAVESHARE_ESP32_S3_TOUCH_LCD_185_BOX.yml +41 -0
- data/vendor/board-maps/yaml/WAVESHARE_ESP32_S3_TOUCH_LCD_21.yml +41 -0
- data/vendor/board-maps/yaml/WAVESHARE_ESP32_S3_TOUCH_LCD_28.yml +41 -0
- data/vendor/board-maps/yaml/WAVESHARE_ESP32_S3_TOUCH_LCD_4.yml +36 -0
- data/vendor/board-maps/yaml/WAVESHARE_ESP32_S3_TOUCH_LCD_43.yml +38 -0
- data/vendor/board-maps/yaml/WAVESHARE_ESP32_S3_TOUCH_LCD_43B.yml +38 -0
- data/vendor/board-maps/yaml/WAVESHARE_ESP32_S3_TOUCH_LCD_5.yml +38 -0
- data/vendor/board-maps/yaml/WAVESHARE_ESP32_S3_TOUCH_LCD_5B.yml +38 -0
- data/vendor/board-maps/yaml/WAVESHARE_ESP32_S3_TOUCH_LCD_7.yml +38 -0
- data/vendor/board-maps/yaml/WAVESHARE_ESP32_S3_ZERO.yml +36 -0
- data/vendor/board-maps/yaml/WAVESHARE_RP2040_MATRIX.yml +48 -0
- data/vendor/board-maps/yaml/WAVESHARE_RP2040_ONE.yml +1 -0
- data/vendor/board-maps/yaml/WAVESHARE_RP2040_PIZERO.yml +47 -0
- data/vendor/board-maps/yaml/WAVESHARE_RP2040_ZERO.yml +1 -0
- data/vendor/board-maps/yaml/WEACT_STUDIO_ESP32C3.yml +14 -0
- data/vendor/board-maps/yaml/WS_ESP32_S3_MATRIX.yml +38 -0
- data/vendor/board-maps/yaml/WT32_SC01_PLUS.yml +7 -0
- data/vendor/board-maps/yaml/WiFiduinoV2.yml +1 -0
- data/vendor/board-maps/yaml/XIAO_ESP32C3.yml +0 -1
- data/vendor/board-maps/yaml/XIAO_ESP32C6.yml +22 -0
- data/vendor/board-maps/yaml/XIAO_ESP32S3_PLUS.yml +46 -0
- data/vendor/board-maps/yaml/YB_ESP32S3_AMP_V2.yml +28 -0
- data/vendor/board-maps/yaml/YB_ESP32S3_AMP_V3.yml +28 -0
- data/vendor/board-maps/yaml/YB_ESP32S3_ETH.yml +40 -0
- data/vendor/board-maps/yaml/mercury.yml +20 -0
- data/vendor/board-maps/yaml/unphone9.yml +8 -0
- metadata +259 -105
- data/.vscode/settings.json +0 -5
- data/.vscode/tasks.json +0 -20
- data/HARDWARE.md +0 -264
- data/benchmarks/i2c_ssd1306_refresh.rb +0 -84
- data/examples/advanced/m5_env.rb +0 -48
- data/examples/advanced/rotary_encoder_mac_volume.rb +0 -48
- data/examples/advanced/ssd1306_time_temp_rh.rb +0 -48
- data/examples/analog_io/ads1115.rb +0 -57
- data/examples/analog_io/ads1118.rb +0 -73
- data/examples/analog_io/dac_loopback.rb +0 -34
- data/examples/analog_io/input.rb +0 -55
- data/examples/connection/tcp.rb +0 -34
- data/examples/digital_io/button.rb +0 -13
- data/examples/digital_io/rotary_encoder.rb +0 -26
- data/examples/display/hd44780.png +0 -0
- data/examples/display/hd44780.rb +0 -39
- data/examples/display/ssd1306.rb +0 -40
- data/examples/display/ssd1306_s2_pico.rb +0 -29
- data/examples/eeprom/built_in.rb +0 -32
- data/examples/i2c/search.rb +0 -55
- data/examples/led/apa102_bounce.rb +0 -33
- data/examples/led/apa102_breathe.rb +0 -45
- data/examples/led/builtin_blink.rb +0 -12
- data/examples/led/seven_segment_char_echo.rb +0 -15
- data/examples/led/ws2812_bounce.rb +0 -32
- data/examples/led/ws2812_builtin_blink.rb +0 -21
- data/examples/motor/l298.rb +0 -43
- data/examples/motor/servo.rb +0 -16
- data/examples/motor/stepper.png +0 -0
- data/examples/motor/stepper.rb +0 -43
- data/examples/pulse_io/buzzer.rb +0 -30
- data/examples/pulse_io/ir_transmitter.rb +0 -55
- data/examples/rtc/ds3231.rb +0 -48
- data/examples/sensor/aht10.rb +0 -19
- data/examples/sensor/aht20.rb +0 -19
- data/examples/sensor/bme280.rb +0 -38
- data/examples/sensor/bmp180.rb +0 -22
- data/examples/sensor/dht.rb +0 -24
- data/examples/sensor/ds18b20.rb +0 -58
- data/examples/sensor/generic_pir.rb +0 -25
- data/examples/sensor/hcsr04.rb +0 -14
- data/examples/sensor/htu21d.rb +0 -54
- data/examples/sensor/htu31d.rb +0 -35
- data/examples/sensor/neat_tph_readings.rb +0 -26
- data/examples/sensor/qmp6988.rb +0 -53
- data/examples/sensor/rcwl9620.rb +0 -15
- data/examples/sensor/sht3x.rb +0 -34
- data/examples/spi/input_register.rb +0 -50
- data/examples/spi/output_register.rb +0 -49
- data/examples/spi/ssd_through_register.rb +0 -40
- data/examples/spi/two_registers.rb +0 -46
- data/examples/uart/bit_bang_read.rb +0 -16
- data/examples/uart/bit_bang_write.rb +0 -16
- data/examples/uart/board_passthrough.rb +0 -34
- data/examples/uart/hardware_loopback.rb +0 -16
- data/lib/denko/analog_io/sensor.rb +0 -6
- data/lib/denko/eeprom/built_in.rb +0 -69
- data/lib/denko/fonts.rb +0 -106
- data/lib/denko/sensor/virtual.rb +0 -42
- data/src/lib/DenkoIROutESP.cpp +0 -26
- data/test/eeprom/built_in_test.rb +0 -61
- data/tutorial/01-led/led.fzz +0 -0
- data/tutorial/01-led/led.pdf +0 -0
- data/tutorial/01-led/led.rb +0 -73
- data/tutorial/02-button/button.fzz +0 -0
- data/tutorial/02-button/button.pdf +0 -0
- data/tutorial/02-button/button.rb +0 -64
- data/tutorial/03-potentiometer/potentiometer.fzz +0 -0
- data/tutorial/03-potentiometer/potentiometer.pdf +0 -0
- data/tutorial/03-potentiometer/potentiometer.rb +0 -62
- data/tutorial/04-pwm_led/pwm_led.fzz +0 -0
- data/tutorial/04-pwm_led/pwm_led.pdf +0 -0
- data/tutorial/04-pwm_led/pwm_led.rb +0 -66
- data/tutorial/05-rgb_led/rgb_led.fzz +0 -0
- data/tutorial/05-rgb_led/rgb_led.pdf +0 -0
- data/tutorial/05-rgb_led/rgb_led.rb +0 -58
- data/tutorial/05-rgb_led/rgb_mapping.rb +0 -76
- data/vendor/board-maps/yaml/STAMP_S3.yml +0 -8
- /data/vendor/board-maps/yaml/{BRIDGETEK_IDM2040-7A.yml → BRIDGETEK_IDM2040_43A.yml} +0 -0
- /data/vendor/board-maps/yaml/{heltec_wifi_32_lora_V3.yml → HELTEC_WIRELESS_STICK_V3.yml} +0 -0
- /data/vendor/board-maps/yaml/{M5Stack_Core_ESP32.yml → M5STACK_CORE.yml} +0 -0
- /data/vendor/board-maps/yaml/{M5Stamp_Pico.yml → M5STACK_STAMP_PICO.yml} +0 -0
- /data/vendor/board-maps/yaml/{M5Stack-Timer-CAM.yml → M5STACK_TIMER_CAM.yml} +0 -0
data/.vscode/settings.json
DELETED
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
|
-
[](https://github.com/denko-rb/denko/actions/workflows/build_avr.yml)
|
7
|
-
[](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
|
-
[](https://github.com/denko-rb/denko/actions/workflows/build_sam3x.yml)
|
22
|
-
[](https://github.com/denko-rb/denko/actions/workflows/build_samd.yml)
|
23
|
-
[](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
|
-
[](https://github.com/denko-rb/denko/actions/workflows/build_esp8266.yml)
|
48
|
-
[](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
|
-
[](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
|
data/examples/advanced/m5_env.rb
DELETED
@@ -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
|