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
@@ -1,55 +0,0 @@
|
|
1
|
-
#
|
2
|
-
# This is a simple test of the IREmitter (infrared blaster) class.
|
3
|
-
# It is based on this example from the Arduino library:
|
4
|
-
# https://github.com/Arduino-IRremote/Arduino-IRremote/tree/master/examples/SendDemo
|
5
|
-
#
|
6
|
-
# To verify your emitter is working, you can flash this sketch on a second board:
|
7
|
-
# https://github.com/Arduino-IRremote/Arduino-IRremote/tree/master/examples/ReceiveDemo
|
8
|
-
#
|
9
|
-
# Attach an IR receiver to the receive pin (2 for Atmel AVR) and observe for serial output.
|
10
|
-
#
|
11
|
-
# If you don't have 2 boards, use the receive sketch to capture a code from a button
|
12
|
-
# of a remote you have. Copy the raw code (long list of numbers in curly braces),
|
13
|
-
# and modify it into a Ruby array.
|
14
|
-
#
|
15
|
-
# Reflash the denko sketch onto your board and test the IR code operates your device.
|
16
|
-
#
|
17
|
-
# Both of these methods require you to have an IR receiver handy.
|
18
|
-
# If you do not have one, there are IR codes in Raw format for many devices
|
19
|
-
# available on sites like http://irdb.tk/codes/
|
20
|
-
# When formatted as a string of numbers with + and - in front of each number,
|
21
|
-
# you will need to convert them to the array format before use.
|
22
|
-
#
|
23
|
-
require 'bundler/setup'
|
24
|
-
require 'denko'
|
25
|
-
|
26
|
-
# Note: If testing with 2 boards connected to the same computer, you want to be
|
27
|
-
# explicit about which serial device this script must use. The relevant
|
28
|
-
# Connection call is below, but commented out. Enable it and substitute the approriate
|
29
|
-
# device for the board that has the IR emitter connected and denko sketch loaded.
|
30
|
-
# Open the receiver board in the Arduino IDE's or another serial monitor.
|
31
|
-
#
|
32
|
-
connection = Denko::Connection::Serial.new
|
33
|
-
# connection = Denko::Connection::Serial.new(device: "/dev/ttyACM0")
|
34
|
-
board = Denko::Board.new(connection)
|
35
|
-
|
36
|
-
#
|
37
|
-
# The IR emitter can be set up on most pins for most boards, but there might be conflicts
|
38
|
-
# with other hardware or libraries. Try different pins if one doesn't work.
|
39
|
-
#
|
40
|
-
ir = Denko::PulseIO::IRTransmitter.new(board: board, pin: 3)
|
41
|
-
|
42
|
-
# NEC Raw-Data=0xF708FB04. LSBFIRST, so the binary for each hex digit below is backward.
|
43
|
-
code = [ 9000, 4500, # Start bit
|
44
|
-
560, 560, 560, 560, 560, 1690, 560, 560, # 0010 0x4 command
|
45
|
-
560, 560, 560, 560, 560, 560, 560, 560, # 0000 0x0 command
|
46
|
-
560, 1690, 560, 1690, 560,560, 560, 1690, # 1101 0xB command inverted
|
47
|
-
560, 1690, 560, 1690, 560, 1690, 560, 1690, # 1111 0xF command inverted
|
48
|
-
560, 560, 560, 560, 560, 560, 560, 1690, # 0001 0x8 address
|
49
|
-
560, 560, 560, 560, 560, 560, 560, 560, # 0000 0x0 address
|
50
|
-
560, 1690, 560, 1690, 560, 1690, 560, 560, # 1110 0x7 address inverted
|
51
|
-
560, 1690, 560, 1690, 560, 1690, 560, 1690, # 1111 0xF address inverted
|
52
|
-
560] # Stop bit
|
53
|
-
|
54
|
-
ir.emit(code)
|
55
|
-
board.finish_write
|
data/examples/rtc/ds3231.rb
DELETED
@@ -1,48 +0,0 @@
|
|
1
|
-
#
|
2
|
-
# Example using a D3231 real-time-clock over I2C. Sets the time and reads it
|
3
|
-
# back every 5 seconds.
|
4
|
-
#
|
5
|
-
require 'bundler/setup'
|
6
|
-
require 'denko'
|
7
|
-
|
8
|
-
board = Denko::Board.new(Denko::Connection::Serial.new)
|
9
|
-
|
10
|
-
#
|
11
|
-
# Default pins for the I2C0 (first) interface on most chips:
|
12
|
-
#
|
13
|
-
# ATmega 328p: SDA = 'A4' SCL = 'A5' - Arduino Uno, Nano
|
14
|
-
# ATmega 32u4: SDA = 2 SCL = 3 - Arduino Leonardo, Pro Micro
|
15
|
-
# ATmega1280 / 2560: SDA = 20 SCL = 21 - Arduino Mega
|
16
|
-
# SAM3X8E: SDA = 20 SCL = 21 - Arduino Due
|
17
|
-
# SAMD21G18: SDA = 20 SCL = 21 - Arduino Zero, M0, M0 Pro
|
18
|
-
# ESP8266: SDA = 4 SCL = 5
|
19
|
-
# ESP32: SDA = 21 SCL = 22
|
20
|
-
# RP2040: SDA = 4 SCL = 5 - Raspberry Pi Pico (W)
|
21
|
-
#
|
22
|
-
# Only give the SDA pin of the I2C bus. SCL (clock) pin must be
|
23
|
-
# connected for it to work, but we don't need to control it.
|
24
|
-
#
|
25
|
-
bus = Denko::I2C::Bus.new(board: board, pin: 'A4')
|
26
|
-
|
27
|
-
# Tell the bus to search for devices.
|
28
|
-
bus.search
|
29
|
-
|
30
|
-
# Show the found devices.
|
31
|
-
puts "No I2C devices connected!" if bus.found_devices.empty?
|
32
|
-
bus.found_devices.each do |address|
|
33
|
-
puts "I2C device connected with address: 0x#{address.to_s(16)}"
|
34
|
-
end
|
35
|
-
|
36
|
-
# 0x68 or 140 is the I2C address for most real time clocks.
|
37
|
-
unless (bus.found_devices.include? 0x68)
|
38
|
-
puts "No real time clock found!" unless bus.found_devices.empty?
|
39
|
-
else
|
40
|
-
puts; puts "Using real time clock at address 0x68"; puts
|
41
|
-
rtc = Denko::RTC::DS3231.new(bus: bus, address: 0x68)
|
42
|
-
rtc.time = Time.now
|
43
|
-
|
44
|
-
5.times do
|
45
|
-
puts rtc.time
|
46
|
-
sleep 5
|
47
|
-
end
|
48
|
-
end
|
data/examples/sensor/aht10.rb
DELETED
@@ -1,19 +0,0 @@
|
|
1
|
-
#
|
2
|
-
# Example using AHT21 sensor over I2C, for temperature and humidity.
|
3
|
-
#
|
4
|
-
require 'bundler/setup'
|
5
|
-
require 'denko'
|
6
|
-
|
7
|
-
board = Denko::Board.new(Denko::Connection::Serial.new)
|
8
|
-
bus = Denko::I2C::Bus.new(board: board, pin: :SDA)
|
9
|
-
sensor = Denko::Sensor::AHT10.new(bus: bus) # address: 0x38 default
|
10
|
-
|
11
|
-
# Get the shared #print_tph_reading method to print readings neatly.
|
12
|
-
require_relative 'neat_tph_readings'
|
13
|
-
|
14
|
-
# Poll it and print readings.
|
15
|
-
sensor.poll(5) do |reading|
|
16
|
-
print_tph_reading(reading)
|
17
|
-
end
|
18
|
-
|
19
|
-
sleep
|
data/examples/sensor/aht20.rb
DELETED
@@ -1,19 +0,0 @@
|
|
1
|
-
#
|
2
|
-
# Example using AHT21 sensor over I2C, for temperature and humidity.
|
3
|
-
#
|
4
|
-
require 'bundler/setup'
|
5
|
-
require 'denko'
|
6
|
-
|
7
|
-
board = Denko::Board.new(Denko::Connection::Serial.new)
|
8
|
-
bus = Denko::I2C::Bus.new(board: board, pin: :SDA)
|
9
|
-
sensor = Denko::Sensor::AHT20.new(bus: bus) # address: 0x38 default
|
10
|
-
|
11
|
-
# Get the shared #print_tph_reading method to print readings neatly.
|
12
|
-
require_relative 'neat_tph_readings'
|
13
|
-
|
14
|
-
# Poll it and print readings.
|
15
|
-
sensor.poll(5) do |reading|
|
16
|
-
print_tph_reading(reading)
|
17
|
-
end
|
18
|
-
|
19
|
-
sleep
|
data/examples/sensor/bme280.rb
DELETED
@@ -1,38 +0,0 @@
|
|
1
|
-
#
|
2
|
-
# Example using a BME280 sensor over I2C, for temperature, pressure and humidity.
|
3
|
-
#
|
4
|
-
require 'bundler/setup'
|
5
|
-
require 'denko'
|
6
|
-
|
7
|
-
board = Denko::Board.new(Denko::Connection::Serial.new)
|
8
|
-
bus = Denko::I2C::Bus.new(board: board, pin: :SDA)
|
9
|
-
|
10
|
-
sensor = Denko::Sensor::BME280.new(bus: bus) # address: 0x76 default
|
11
|
-
# Use A BMP280 with no humidity instead.
|
12
|
-
# sensor = Denko::Sensor::BMP280.new(bus: bus) # address: 0x76
|
13
|
-
|
14
|
-
# Default reading mode is oneshot ("forced" in datasheet).
|
15
|
-
# sensor.oneshot_mode
|
16
|
-
|
17
|
-
# Enable oversampling independently on each sensor.
|
18
|
-
# sensor.temperature_samples = 8
|
19
|
-
# sensor.pressure_samples = 2
|
20
|
-
# sensor.humidity_samples = 4
|
21
|
-
|
22
|
-
# Enable continuous reading mode ("normal" in datasheet), with standby time and IIR filter.
|
23
|
-
# sensor.continuous_mode
|
24
|
-
# sensor.standby_time = 62.5
|
25
|
-
# sensor.iir_coefficient = 4
|
26
|
-
|
27
|
-
# Print raw config register bits.
|
28
|
-
# print sensor.config_register_bits
|
29
|
-
|
30
|
-
# Get the shared #print_tph_reading method to print readings neatly.
|
31
|
-
require_relative 'neat_tph_readings'
|
32
|
-
|
33
|
-
# Poll it and print readings.
|
34
|
-
sensor.poll(5) do |reading|
|
35
|
-
print_tph_reading(reading)
|
36
|
-
end
|
37
|
-
|
38
|
-
sleep
|
data/examples/sensor/bmp180.rb
DELETED
@@ -1,22 +0,0 @@
|
|
1
|
-
#
|
2
|
-
# Example using a BMP180 sensor over I2C, for temperature and pressure.
|
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
|
-
sensor = Denko::Sensor::BMP180.new(bus: bus) # address: 0x77 default
|
10
|
-
|
11
|
-
# Enable oversampling for the pressure sensor only (1,2,4, 8).
|
12
|
-
# sensor.pressure_samples = 8
|
13
|
-
|
14
|
-
# Get the shared #print_tph_reading method to print readings neatly.
|
15
|
-
require_relative 'neat_tph_readings'
|
16
|
-
|
17
|
-
# Poll it and print readings.
|
18
|
-
sensor.poll(5) do |reading|
|
19
|
-
print_tph_reading(reading)
|
20
|
-
end
|
21
|
-
|
22
|
-
sleep
|
data/examples/sensor/dht.rb
DELETED
@@ -1,24 +0,0 @@
|
|
1
|
-
#
|
2
|
-
# Example of how to use the DHT class for DHT 11 and DHT 22 sensors.
|
3
|
-
#
|
4
|
-
require 'bundler/setup'
|
5
|
-
require 'denko'
|
6
|
-
|
7
|
-
board = Denko::Board.new(Denko::Connection::Serial.new)
|
8
|
-
dht = Denko::Sensor::DHT.new(pin: 5, board: board)
|
9
|
-
|
10
|
-
# The DHT class pre-processes raw data from the board. When it reaches callbacks
|
11
|
-
# it's already hash of :temperature and :humidity keys, both with Float values.
|
12
|
-
dht.add_callback do |reading|
|
13
|
-
print "#{Time.now.strftime '%Y-%m-%d %H:%M:%S'} | "
|
14
|
-
if reading[:error]
|
15
|
-
puts "Error: #{reading[:error]}"
|
16
|
-
else
|
17
|
-
print "#{reading[:celsius]} \xC2\xB0C | #{reading[:fahrenheit]} \xC2\xB0F | "
|
18
|
-
puts "#{reading[:humidity]}% relative humidity"
|
19
|
-
end
|
20
|
-
end
|
21
|
-
|
22
|
-
# Read it every 5 seconds.
|
23
|
-
dht.poll(5)
|
24
|
-
sleep
|
data/examples/sensor/ds18b20.rb
DELETED
@@ -1,58 +0,0 @@
|
|
1
|
-
#
|
2
|
-
# Example of how to use the Dallas DS18B20 temperature sensor.
|
3
|
-
#
|
4
|
-
require 'bundler/setup'
|
5
|
-
require 'denko'
|
6
|
-
|
7
|
-
board = Denko::Board.new(Denko::Connection::Serial.new)
|
8
|
-
bus = Denko::OneWire::Bus.new(pin:4, board: board)
|
9
|
-
|
10
|
-
# The bus detects parasite power automatically when initialized.
|
11
|
-
# It can tell that parasite power is in use, but not by WHICH devices.
|
12
|
-
if bus.parasite_power
|
13
|
-
puts "Parasite power detected..."; puts
|
14
|
-
end
|
15
|
-
|
16
|
-
# Call #device_present to reset the bus and return presence pulse as a boolean.
|
17
|
-
if bus.device_present?
|
18
|
-
puts "Devices present on bus..."; puts
|
19
|
-
else
|
20
|
-
puts "No devices present on bus... Quitting..."
|
21
|
-
return
|
22
|
-
end
|
23
|
-
|
24
|
-
# Calling #search finds connected devices and stores them in #found_devices.
|
25
|
-
# Each hash contains a device's ROM address and matching Ruby class if one exists.
|
26
|
-
bus.search
|
27
|
-
count = bus.found_devices.count
|
28
|
-
puts "Found #{count} device#{'s' if count > 1} on the bus:"
|
29
|
-
puts bus.found_devices.inspect; puts
|
30
|
-
|
31
|
-
# We can use the search results to setup instances of the device classes.
|
32
|
-
ds18b20s = []
|
33
|
-
bus.found_devices.each do |d|
|
34
|
-
if d[:class] == Denko::Sensor::DS18B20
|
35
|
-
ds18b20s << d[:class].new(bus: bus, address: d[:address])
|
36
|
-
end
|
37
|
-
end
|
38
|
-
|
39
|
-
# Format a reading for printing on a line.
|
40
|
-
def print_reading(reading, sensor)
|
41
|
-
print "#{Time.now.strftime '%Y-%m-%d %H:%M:%S'} - "
|
42
|
-
print "Serial(HEX): #{sensor.serial_number} | Res: #{sensor.resolution} bits | "
|
43
|
-
|
44
|
-
if reading[:crc_error]
|
45
|
-
puts "CRC check failed for this reading!"
|
46
|
-
else
|
47
|
-
print "#{reading[:celsius]} \xC2\xB0C | #{reading[:fahrenheit]} \xC2\xB0F | "
|
48
|
-
puts "Raw: #{reading[:raw].inspect}"
|
49
|
-
end
|
50
|
-
end
|
51
|
-
|
52
|
-
ds18b20s.each do |sensor|
|
53
|
-
sensor.poll(5) do |reading|
|
54
|
-
print_reading(reading, sensor)
|
55
|
-
end
|
56
|
-
end
|
57
|
-
|
58
|
-
sleep
|
@@ -1,25 +0,0 @@
|
|
1
|
-
#
|
2
|
-
# Example using a PIR motion sensor. Tested with AS312 and HC-SR501 sensors.
|
3
|
-
#
|
4
|
-
# General notes:
|
5
|
-
# - Both sensors have a few seconds "dead time" after "motion stop" (logical 0), where further
|
6
|
-
# motion will not trigger "motion start" (logical 1).
|
7
|
-
#
|
8
|
-
# HC-SR501 notes:
|
9
|
-
# - Needs some time to warm up and start working properly.
|
10
|
-
# - Set the time potentiometer to its lowest value.
|
11
|
-
# - Make sure retriggering is enabled. It might be default, but there's a jumper to solder too.
|
12
|
-
#
|
13
|
-
require 'bundler/setup'
|
14
|
-
require 'denko'
|
15
|
-
|
16
|
-
board = Denko::Board.new(Denko::Connection::Serial.new)
|
17
|
-
sensor = Denko::Sensor::GenericPIR.new(board: board, pin: 8)
|
18
|
-
|
19
|
-
sensor.on_motion_start { print "Motion detected! \r" }
|
20
|
-
sensor.on_motion_stop { print "No motion detected... \r" }
|
21
|
-
|
22
|
-
# Read initial state.
|
23
|
-
sensor.read
|
24
|
-
|
25
|
-
sleep
|
data/examples/sensor/hcsr04.rb
DELETED
@@ -1,14 +0,0 @@
|
|
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
|
data/examples/sensor/htu21d.rb
DELETED
@@ -1,54 +0,0 @@
|
|
1
|
-
#
|
2
|
-
# Example using HTU21D sensor over I2C, for temperature and humidity.
|
3
|
-
#
|
4
|
-
require 'bundler/setup'
|
5
|
-
require 'denko'
|
6
|
-
|
7
|
-
board = Denko::Board.new(Denko::Connection::Serial.new)
|
8
|
-
bus = Denko::I2C::Bus.new(board: board, pin: :SDA)
|
9
|
-
htu21d = Denko::Sensor::HTU21D.new(bus: bus) # address: 0x40 default
|
10
|
-
|
11
|
-
# Get and set heater state.
|
12
|
-
htu21d.heater_on
|
13
|
-
puts "Heater on: #{htu21d.heater_on?}"
|
14
|
-
htu21d.heater_off
|
15
|
-
puts "Heater off: #{htu21d.heater_off?}"
|
16
|
-
puts
|
17
|
-
|
18
|
-
# Back to default settings, except heater state.
|
19
|
-
htu21d.reset
|
20
|
-
|
21
|
-
# Only 4 resolution combinations are available, and need to be
|
22
|
-
# set by giving a bitmask from the datasheet:
|
23
|
-
# 0x00 = 14-bit temperature, 12-bit humidity
|
24
|
-
# 0x01 = 12-bit temperature, 8-bit humidity (default)
|
25
|
-
# 0x80 = 13-bit temperature, 10-bit humidity
|
26
|
-
# 0x81 = 11-bit temperature, 11-bit humidity
|
27
|
-
#
|
28
|
-
htu21d.resolution = 0x81
|
29
|
-
puts "Temperature resolution: #{htu21d.resolution[:temperature]} bits"
|
30
|
-
puts "Humidity resolution: #{htu21d.resolution[:humidity]} bits"
|
31
|
-
puts
|
32
|
-
|
33
|
-
# Take direct readings by calling methods on the HTU21D instance.
|
34
|
-
# Note: These methods do not take block callbacks like other components.
|
35
|
-
# The HTU21D class doesn't directly implement polling methods either.
|
36
|
-
#
|
37
|
-
puts "Direct Temperature: #{htu21d.read_temperature.round(3)} \xC2\xB0C"
|
38
|
-
puts "Direct Humidity: #{htu21d.read_humidity.round(3)} %"
|
39
|
-
puts
|
40
|
-
|
41
|
-
# The last read state can be accessed through sub-objects or [].
|
42
|
-
puts "Last Temperature: #{htu21d.temperature.fahrenheit.round(3)} \xC2\xB0F"
|
43
|
-
puts "Last Humidity: #{htu21d[:humidity].round(3)} %"
|
44
|
-
puts
|
45
|
-
|
46
|
-
# Poll temperature and humidity at different rates by calling methods on the sub-objects.
|
47
|
-
htu21d.temperature.poll(2) do |value|
|
48
|
-
puts "Sub-Object Temperature: #{value.round(3)} \xC2\xB0C"
|
49
|
-
end
|
50
|
-
htu21d.humidity.poll(4) do |value|
|
51
|
-
puts "Sub-Object Humidity: #{value.round(3)} %"
|
52
|
-
end
|
53
|
-
|
54
|
-
sleep
|
data/examples/sensor/htu31d.rb
DELETED
@@ -1,35 +0,0 @@
|
|
1
|
-
#
|
2
|
-
# Example using HTU31D sensor over I2C, for temperature and humidity.
|
3
|
-
#
|
4
|
-
require 'bundler/setup'
|
5
|
-
require 'denko'
|
6
|
-
|
7
|
-
board = Denko::Board.new(Denko::Connection::Serial.new)
|
8
|
-
bus = Denko::I2C::Bus.new(board: board, pin: :SDA)
|
9
|
-
sensor = Denko::Sensor::HTU31D.new(bus: bus)
|
10
|
-
|
11
|
-
# Get and set heater state.
|
12
|
-
sensor.heater_on
|
13
|
-
puts "Heater on: #{sensor.heater_on?}"
|
14
|
-
sensor.heater_off
|
15
|
-
puts "Heater off: #{sensor.heater_off?}"
|
16
|
-
|
17
|
-
# Back to default settings, including heater off, unlike HTU21D.
|
18
|
-
sensor.reset
|
19
|
-
puts "Resetting HTU31D..."
|
20
|
-
puts "Heater off: #{sensor.heater_off?}"
|
21
|
-
puts
|
22
|
-
|
23
|
-
# Resolution goes from 0..3 separately for temperature and humidity. See datasheet.
|
24
|
-
sensor.temperature_resolution = 3
|
25
|
-
sensor.humidity_resolution = 3
|
26
|
-
|
27
|
-
# Get the shared #print_tph_reading method to print readings neatly.
|
28
|
-
require_relative 'neat_tph_readings'
|
29
|
-
|
30
|
-
# Unlike HTU21D, HTU31D works as a regular polled sensor.
|
31
|
-
sensor.poll(5) do |reading|
|
32
|
-
print_tph_reading(reading)
|
33
|
-
end
|
34
|
-
|
35
|
-
sleep
|
@@ -1,26 +0,0 @@
|
|
1
|
-
#
|
2
|
-
# This helper method can be used in temp/pressure/humidity sensor examples.
|
3
|
-
# Give a hash with readings as float values and it prints them neatly.
|
4
|
-
#
|
5
|
-
def print_tph_reading(reading)
|
6
|
-
# Time
|
7
|
-
print "#{Time.now.strftime '%Y-%m-%d %H:%M:%S'} - "
|
8
|
-
|
9
|
-
# Temperature
|
10
|
-
formatted_temp = reading[:temperature].to_f.round(2).to_s.ljust(5, '0')
|
11
|
-
print "Temperature: #{formatted_temp} \xC2\xB0C"
|
12
|
-
|
13
|
-
# Pressure
|
14
|
-
if reading[:pressure]
|
15
|
-
formatted_pressure = (reading[:pressure] / 101325).round(5).to_s.ljust(7, '0')
|
16
|
-
print " | Pressure #{formatted_pressure} atm"
|
17
|
-
end
|
18
|
-
|
19
|
-
# Humidity
|
20
|
-
if reading[:humidity]
|
21
|
-
formatted_humidity = reading[:humidity].round(2).to_s.ljust(5, '0')
|
22
|
-
print " | Humidity #{formatted_humidity} %"
|
23
|
-
end
|
24
|
-
|
25
|
-
puts
|
26
|
-
end
|
data/examples/sensor/qmp6988.rb
DELETED
@@ -1,53 +0,0 @@
|
|
1
|
-
#
|
2
|
-
# Example using QMP6988 sensor over I2C, for air temperature and pressure.
|
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
|
-
sensor = Denko::Sensor::QMP6988.new(bus: bus) # address: 0x70 default
|
10
|
-
|
11
|
-
# Verify chip_id.
|
12
|
-
print "I2C device has chip ID: 0x#{sensor.chip_id.to_s(16).upcase}. "
|
13
|
-
if sensor.chip_id == 0x5C
|
14
|
-
puts "This matches the QMP6988."
|
15
|
-
else
|
16
|
-
puts "This does not match the QMP6988."
|
17
|
-
end
|
18
|
-
puts
|
19
|
-
|
20
|
-
#
|
21
|
-
# Change measurement settings:
|
22
|
-
# temperature_samples can be 1,2,4,8,16,32 or 64 (default: 1)
|
23
|
-
# pressure_samples can be 1,2,4,8,16,32 or 64 (default: 1)
|
24
|
-
# iir_coefficient can be 0,2,4,8,16 or 32 (default: 0)
|
25
|
-
#
|
26
|
-
# High accuracy settings from datasheet, with IIR of 2.
|
27
|
-
sensor.temperature_samples = 2
|
28
|
-
sensor.pressure_samples = 16
|
29
|
-
sensor.iir_coefficient = 2
|
30
|
-
|
31
|
-
#
|
32
|
-
# Change mode (default: forced_mode)
|
33
|
-
#
|
34
|
-
# Buggy on ESP32S3 in forced mode. Data registers return zeroes on all but first read.
|
35
|
-
# Can't recreate on ESP32 V1, AVR or SAMD21. Put it in contiuous mode just in case.
|
36
|
-
sensor.continuous_mode
|
37
|
-
# sensor.forced_mode
|
38
|
-
|
39
|
-
#
|
40
|
-
# Set standby time (between measurements) for continuous mode only:
|
41
|
-
# standby_time (given in ms) can be 1,5,20,250,500,1000,2000 or 4000 (default: 1)
|
42
|
-
#
|
43
|
-
# sensor.standby_time = 500
|
44
|
-
|
45
|
-
# Get the shared #print_tph_reading method to print readings neatly.
|
46
|
-
require_relative 'neat_tph_readings'
|
47
|
-
|
48
|
-
# Poll it and print readings.
|
49
|
-
sensor.poll(5) do |reading|
|
50
|
-
print_tph_reading(reading)
|
51
|
-
end
|
52
|
-
|
53
|
-
sleep
|
data/examples/sensor/rcwl9620.rb
DELETED
@@ -1,15 +0,0 @@
|
|
1
|
-
#
|
2
|
-
# Example using an RCWL-9620 sensor over I2C to measure distance.
|
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
|
-
sensor = Denko::Sensor::RCWL9620.new(bus: bus) # address: 0x57 default
|
10
|
-
|
11
|
-
sensor.poll(1) do |distance|
|
12
|
-
puts "Distance is #{distance} mm"
|
13
|
-
end
|
14
|
-
|
15
|
-
sleep
|
data/examples/sensor/sht3x.rb
DELETED
@@ -1,34 +0,0 @@
|
|
1
|
-
#
|
2
|
-
# Example using SHT30/31/35 sensor over I2C, for temperature and humidity.
|
3
|
-
#
|
4
|
-
require 'bundler/setup'
|
5
|
-
require 'denko'
|
6
|
-
|
7
|
-
board = Denko::Board.new(Denko::Connection::Serial.new)
|
8
|
-
bus = Denko::I2C::Bus.new(board: board, pin: :SDA)
|
9
|
-
sensor = Denko::Sensor::SHT3X.new(bus: bus) # address: 0x44 default
|
10
|
-
|
11
|
-
# Heater control
|
12
|
-
sensor.heater_on
|
13
|
-
puts "Heater on: #{sensor.heater_on?}"
|
14
|
-
sensor.heater_off
|
15
|
-
puts "Heater off: #{sensor.heater_off?}"
|
16
|
-
|
17
|
-
# Reset (turns heater off)
|
18
|
-
sensor.reset
|
19
|
-
puts "Resetting..."
|
20
|
-
puts "Heater off: #{sensor.heater_off?}"
|
21
|
-
puts
|
22
|
-
|
23
|
-
# Set repeatability= :low, :medium or :high (default). See datasheet for details.
|
24
|
-
sensor.repeatability = :high
|
25
|
-
|
26
|
-
# Get the shared #print_tph_reading method to print readings neatly.
|
27
|
-
require_relative 'neat_tph_readings'
|
28
|
-
|
29
|
-
# Poll it and print readings.
|
30
|
-
sensor.poll(5) do |reading|
|
31
|
-
print_tph_reading(reading)
|
32
|
-
end
|
33
|
-
|
34
|
-
sleep
|
@@ -1,50 +0,0 @@
|
|
1
|
-
#
|
2
|
-
# Example of a Button connected through an input shift register (CD4021B).
|
3
|
-
# Can be used over either a bit bang or hardware SPI interface.
|
4
|
-
#
|
5
|
-
require 'bundler/setup'
|
6
|
-
require 'denko'
|
7
|
-
|
8
|
-
# SPI pins (on board)
|
9
|
-
SPI_BIT_BANG_PINS = { clock: 13, input: 12 }
|
10
|
-
REGISTER_SELECT_PIN = 9
|
11
|
-
|
12
|
-
# Button pin (on register parallel outputs)
|
13
|
-
BUTTON_PIN = 0
|
14
|
-
|
15
|
-
board = Denko::Board.new(Denko::Connection::Serial.new)
|
16
|
-
|
17
|
-
# 1-way (input) bit bang SPI interface on any pins (slower, but flexible).
|
18
|
-
bus = Denko::SPI::BitBang.new(board: board, pins: SPI_BIT_BANG_PINS)
|
19
|
-
|
20
|
-
# Use the default hardware SPI bus (faster, but predetermined pins).
|
21
|
-
# bus = Denko::SPI::Bus.new(board: board)
|
22
|
-
|
23
|
-
# Show the hardware SPI pins to aid connection.
|
24
|
-
# MOSI = output | MISO = input | SCK = clock
|
25
|
-
# puts board.map.select { |name, number| [:MOSI, :MISO, :SCK].include?(name) }
|
26
|
-
|
27
|
-
# InputRegister needs a bus and its select pin. The CD4021 likes SPI mode 2.
|
28
|
-
# Other options and their defaults:
|
29
|
-
# bytes: 1 - For daisy-chaining registers
|
30
|
-
# spi_frequency: 1000000 - Only affects hardware SPI interfaces
|
31
|
-
# spi_mode: 0
|
32
|
-
# spi_bit_order: :msbfirst
|
33
|
-
#
|
34
|
-
register = Denko::SPI::InputRegister.new(bus: bus, pin: REGISTER_SELECT_PIN, spi_mode: 2)
|
35
|
-
|
36
|
-
# InputRegister implements enough of the Board interface that digital input
|
37
|
-
# components can treat it as a Board. Do that with the Button.
|
38
|
-
#
|
39
|
-
# button starts listening automatically, which triggers register to start listening,
|
40
|
-
# so it can update button as needed. Registers listen with an 8ms interval by default,
|
41
|
-
# compared to the 4ms default for a Button directly connected to a Board.
|
42
|
-
#
|
43
|
-
button = Denko::DigitalIO::Button.new(pin: 0, board: register)
|
44
|
-
|
45
|
-
# Button callbacks.
|
46
|
-
button.down { puts "Button pressed" }
|
47
|
-
button.up { puts "Button released" }
|
48
|
-
|
49
|
-
# Sleep the main thread. Press the button and callbacks will run.
|
50
|
-
sleep
|
@@ -1,49 +0,0 @@
|
|
1
|
-
#
|
2
|
-
# Example of LED connected through an output shift register (74HC595).
|
3
|
-
# Can be used over either a bit bang or hardware SPI interface.
|
4
|
-
#
|
5
|
-
require 'bundler/setup'
|
6
|
-
require 'denko'
|
7
|
-
|
8
|
-
# SPI pins (on board)
|
9
|
-
SPI_BIT_BANG_PINS = { clock: 13, output: 11 }
|
10
|
-
REGISTER_SELECT_PIN = 10
|
11
|
-
|
12
|
-
# LED pin (on register parallel outputs)
|
13
|
-
LED_PIN = 0
|
14
|
-
|
15
|
-
board = Denko::Board.new(Denko::Connection::Serial.new)
|
16
|
-
|
17
|
-
# 1-way (output) bit bang SPI interface on any pins (slower, but flexible).
|
18
|
-
bus = Denko::SPI::BitBang.new(board: board, pins: SPI_BIT_BANG_PINS)
|
19
|
-
|
20
|
-
# Use the default hardware SPI bus (faster, but predetermined pins).
|
21
|
-
# bus = Denko::SPI::Bus.new(board: board)
|
22
|
-
|
23
|
-
# Show the hardware SPI pins to aid connection.
|
24
|
-
# MOSI = output | MISO = input | SCK = clock
|
25
|
-
# puts board.map.select { |name, number| [:MOSI, :MISO, :SCK].include?(name) }
|
26
|
-
|
27
|
-
# OutputRegister needs a bus and its select pin.
|
28
|
-
# Other options and their defaults:
|
29
|
-
# bytes: 1 - For daisy-chaining registers
|
30
|
-
# spi_frequency: 1000000 - Only affects hardware SPI interfaces
|
31
|
-
# spi_mode: 0
|
32
|
-
# spi_bit_order: :msbfirst
|
33
|
-
# write_delay: 0.001 - How long to buffer writes, in seconds
|
34
|
-
# buffer_writes: true - Wait for write_delay before writing whole register state.
|
35
|
-
# Makes proxied components write pseudo-parallelly.
|
36
|
-
#
|
37
|
-
register = Denko::SPI::OutputRegister.new(bus: bus, pin: REGISTER_SELECT_PIN)
|
38
|
-
|
39
|
-
# We can turn the LED on by writing a 1 to the lowest bit (0) of the register.
|
40
|
-
register.write(0b00000001)
|
41
|
-
|
42
|
-
# OutputRegister implements enough of the Board interface that digital output
|
43
|
-
# components can treat it as a Board. Do that with the LED instead.
|
44
|
-
#
|
45
|
-
led = Denko::LED.new(board: register, pin: 0)
|
46
|
-
|
47
|
-
# Blink the LED and sleep the main thread.
|
48
|
-
led.blink 0.5
|
49
|
-
sleep
|