denko 0.13.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.github/workflows/build_avr.yml +61 -0
- data/.github/workflows/build_esp32.yml +58 -0
- data/.github/workflows/build_esp8266.yml +57 -0
- data/.github/workflows/build_megaavr.yml +61 -0
- data/.github/workflows/build_rp2040.yml +61 -0
- data/.github/workflows/build_sam3x.yml +59 -0
- data/.github/workflows/build_samd.yml +61 -0
- data/.github/workflows/ruby.yml +47 -0
- data/.gitignore +24 -0
- data/.gitmodules +3 -0
- data/.vscode/settings.json +5 -0
- data/.vscode/tasks.json +20 -0
- data/CHANGELOG.md +466 -0
- data/DEPS_CLI.md +80 -0
- data/DEPS_IDE.md +120 -0
- data/Gemfile +4 -0
- data/HARDWARE.md +195 -0
- data/LICENSE +22 -0
- data/README.md +152 -0
- data/Rakefile +11 -0
- data/bin/denko +22 -0
- data/build +27 -0
- data/denko.gemspec +47 -0
- data/examples/advanced/rotary_encoder_mac_volume.rb +48 -0
- data/examples/advanced/ssd1306_time_temp_rh.rb +48 -0
- data/examples/analog_io/ads1118.rb +74 -0
- data/examples/analog_io/dac_loopback.rb +32 -0
- data/examples/analog_io/input.rb +52 -0
- data/examples/connection/tcp.rb +34 -0
- data/examples/digital_io/rotary_encoder.rb +26 -0
- data/examples/display/hd44780.png +0 -0
- data/examples/display/hd44780.rb +39 -0
- data/examples/display/ssd1306.rb +40 -0
- data/examples/display/ssd1306_s2_pico.rb +29 -0
- data/examples/eeprom/built_in.rb +32 -0
- data/examples/i2c/search.rb +53 -0
- data/examples/led/apa102_bounce.rb +33 -0
- data/examples/led/apa102_breathe.rb +45 -0
- data/examples/led/builtin_blink.rb +12 -0
- data/examples/led/seven_segment_char_echo.rb +15 -0
- data/examples/led/ws2812_bounce.rb +32 -0
- data/examples/led/ws2812_builtin_blink.rb +21 -0
- data/examples/motor/l298.rb +43 -0
- data/examples/motor/servo.rb +16 -0
- data/examples/motor/stepper.png +0 -0
- data/examples/motor/stepper.rb +43 -0
- data/examples/pulse_io/buzzer.rb +30 -0
- data/examples/pulse_io/ir_transmitter.rb +55 -0
- data/examples/rtc/ds3231.rb +48 -0
- data/examples/sensor/aht10.rb +15 -0
- data/examples/sensor/aht20.rb +15 -0
- data/examples/sensor/bme280.rb +75 -0
- data/examples/sensor/dht.rb +24 -0
- data/examples/sensor/ds18b20.rb +58 -0
- data/examples/sensor/htu21d.rb +54 -0
- data/examples/sensor/htu31d.rb +31 -0
- data/examples/spi/input_register.rb +50 -0
- data/examples/spi/output_register.rb +49 -0
- data/examples/spi/ssd_through_register.rb +40 -0
- data/examples/spi/two_registers.rb +46 -0
- data/examples/uart/bit_bang_read.rb +16 -0
- data/examples/uart/bit_bang_write.rb +16 -0
- data/examples/uart/board_passthrough.rb +34 -0
- data/examples/uart/hardware_loopback.rb +16 -0
- data/lib/denko/analog_io/ads1118.rb +182 -0
- data/lib/denko/analog_io/input.rb +79 -0
- data/lib/denko/analog_io/output.rb +20 -0
- data/lib/denko/analog_io/potentiometer.rb +15 -0
- data/lib/denko/analog_io/sensor.rb +6 -0
- data/lib/denko/analog_io.rb +9 -0
- data/lib/denko/behaviors/board_proxy.rb +23 -0
- data/lib/denko/behaviors/bus_controller.rb +11 -0
- data/lib/denko/behaviors/bus_controller_addressed.rb +15 -0
- data/lib/denko/behaviors/bus_peripheral.rb +21 -0
- data/lib/denko/behaviors/bus_peripheral_addressed.rb +15 -0
- data/lib/denko/behaviors/callbacks.rb +67 -0
- data/lib/denko/behaviors/component.rb +48 -0
- data/lib/denko/behaviors/input_pin.rb +24 -0
- data/lib/denko/behaviors/listener.rb +22 -0
- data/lib/denko/behaviors/multi_pin.rb +72 -0
- data/lib/denko/behaviors/output_pin.rb +13 -0
- data/lib/denko/behaviors/poller.rb +31 -0
- data/lib/denko/behaviors/reader.rb +49 -0
- data/lib/denko/behaviors/single_pin.rb +26 -0
- data/lib/denko/behaviors/state.rb +24 -0
- data/lib/denko/behaviors/subcomponents.rb +35 -0
- data/lib/denko/behaviors/threaded.rb +54 -0
- data/lib/denko/behaviors.rb +26 -0
- data/lib/denko/board/core.rb +151 -0
- data/lib/denko/board/eeprom.rb +20 -0
- data/lib/denko/board/i2c.rb +68 -0
- data/lib/denko/board/infrared.rb +18 -0
- data/lib/denko/board/led_array.rb +18 -0
- data/lib/denko/board/map.rb +46 -0
- data/lib/denko/board/message_pack.rb +7 -0
- data/lib/denko/board/one_wire.rb +34 -0
- data/lib/denko/board/pulse.rb +26 -0
- data/lib/denko/board/servo.rb +22 -0
- data/lib/denko/board/spi.rb +65 -0
- data/lib/denko/board/spi_bit_bang.rb +41 -0
- data/lib/denko/board/tone.rb +23 -0
- data/lib/denko/board/uart.rb +42 -0
- data/lib/denko/board/uart_bit_bang.rb +33 -0
- data/lib/denko/board.rb +104 -0
- data/lib/denko/connection/base.rb +75 -0
- data/lib/denko/connection/board_uart.rb +36 -0
- data/lib/denko/connection/flow_control.rb +153 -0
- data/lib/denko/connection/handshake.rb +60 -0
- data/lib/denko/connection/serial.rb +90 -0
- data/lib/denko/connection/tcp.rb +44 -0
- data/lib/denko/connection.rb +10 -0
- data/lib/denko/digital_io/button.rb +8 -0
- data/lib/denko/digital_io/input.rb +44 -0
- data/lib/denko/digital_io/output.rb +47 -0
- data/lib/denko/digital_io/relay.rb +6 -0
- data/lib/denko/digital_io/rotary_encoder.rb +107 -0
- data/lib/denko/digital_io.rb +9 -0
- data/lib/denko/display/canvas.rb +282 -0
- data/lib/denko/display/hd44780.rb +266 -0
- data/lib/denko/display/ssd1306.rb +179 -0
- data/lib/denko/display.rb +7 -0
- data/lib/denko/eeprom/built_in.rb +69 -0
- data/lib/denko/eeprom.rb +5 -0
- data/lib/denko/fonts.rb +106 -0
- data/lib/denko/i2c/bus.rb +52 -0
- data/lib/denko/i2c/peripheral.rb +38 -0
- data/lib/denko/i2c.rb +6 -0
- data/lib/denko/led/apa102.rb +87 -0
- data/lib/denko/led/base.rb +12 -0
- data/lib/denko/led/rgb.rb +38 -0
- data/lib/denko/led/seven_segment.rb +111 -0
- data/lib/denko/led/ws2812.rb +48 -0
- data/lib/denko/led.rb +13 -0
- data/lib/denko/message.rb +92 -0
- data/lib/denko/motor/l298.rb +49 -0
- data/lib/denko/motor/servo.rb +51 -0
- data/lib/denko/motor/stepper.rb +71 -0
- data/lib/denko/motor.rb +7 -0
- data/lib/denko/one_wire/bus.rb +61 -0
- data/lib/denko/one_wire/bus_enumeration.rb +88 -0
- data/lib/denko/one_wire/constants.rb +17 -0
- data/lib/denko/one_wire/helper.rb +33 -0
- data/lib/denko/one_wire/peripheral.rb +62 -0
- data/lib/denko/one_wire.rb +9 -0
- data/lib/denko/pulse_io/buzzer.rb +25 -0
- data/lib/denko/pulse_io/ir_transmitter.rb +22 -0
- data/lib/denko/pulse_io/pwm_output.rb +34 -0
- data/lib/denko/pulse_io.rb +7 -0
- data/lib/denko/rtc/ds3231.rb +48 -0
- data/lib/denko/rtc.rb +5 -0
- data/lib/denko/sensor/aht.rb +165 -0
- data/lib/denko/sensor/bme280.rb +366 -0
- data/lib/denko/sensor/dht.rb +43 -0
- data/lib/denko/sensor/ds18b20.rb +74 -0
- data/lib/denko/sensor/htu21d.rb +168 -0
- data/lib/denko/sensor/htu31d.rb +187 -0
- data/lib/denko/sensor/virtual.rb +42 -0
- data/lib/denko/sensor.rb +13 -0
- data/lib/denko/spi/base_register.rb +37 -0
- data/lib/denko/spi/bit_bang.rb +74 -0
- data/lib/denko/spi/bus.rb +44 -0
- data/lib/denko/spi/input_register.rb +130 -0
- data/lib/denko/spi/output_register.rb +67 -0
- data/lib/denko/spi/peripheral.rb +43 -0
- data/lib/denko/spi.rb +10 -0
- data/lib/denko/uart/bit_bang.rb +69 -0
- data/lib/denko/uart/hardware.rb +65 -0
- data/lib/denko/uart.rb +6 -0
- data/lib/denko/version.rb +3 -0
- data/lib/denko.rb +39 -0
- data/lib/denko_cli/generator.rb +171 -0
- data/lib/denko_cli/helper.rb +29 -0
- data/lib/denko_cli/missing_files.txt +20 -0
- data/lib/denko_cli/packages.rb +101 -0
- data/lib/denko_cli/parser.rb +73 -0
- data/lib/denko_cli/targets.rb +30 -0
- data/lib/denko_cli/targets.txt +113 -0
- data/lib/denko_cli/usage.txt +34 -0
- data/lib/denko_cli.rb +18 -0
- data/src/denko_ethernet.ino +78 -0
- data/src/denko_serial.ino +41 -0
- data/src/denko_wifi.ino +157 -0
- data/src/lib/Denko.cpp +330 -0
- data/src/lib/Denko.h +259 -0
- data/src/lib/DenkoCoreIO.cpp +322 -0
- data/src/lib/DenkoDefines.h +116 -0
- data/src/lib/DenkoEEPROM.cpp +64 -0
- data/src/lib/DenkoI2C.cpp +155 -0
- data/src/lib/DenkoIROut.cpp +33 -0
- data/src/lib/DenkoIROutESP.cpp +26 -0
- data/src/lib/DenkoLEDArray.cpp +49 -0
- data/src/lib/DenkoOneWire.cpp +156 -0
- data/src/lib/DenkoPulseInput.cpp +57 -0
- data/src/lib/DenkoSPI.cpp +165 -0
- data/src/lib/DenkoSPIBB.cpp +156 -0
- data/src/lib/DenkoServo.cpp +83 -0
- data/src/lib/DenkoTone.cpp +25 -0
- data/src/lib/DenkoUART.cpp +118 -0
- data/src/lib/DenkoUARTBB.cpp +62 -0
- data/target.yml +3 -0
- data/test/analog_io/input_test.rb +38 -0
- data/test/analog_io/output_test.rb +26 -0
- data/test/analog_io/potentiometer_test.rb +62 -0
- data/test/behaviors/board_proxy_test.rb +24 -0
- data/test/behaviors/bus_controller_addressed_test.rb +40 -0
- data/test/behaviors/bus_controller_test.rb +28 -0
- data/test/behaviors/bus_peripheral_addressed.rb +44 -0
- data/test/behaviors/bus_peripheral_test.rb +39 -0
- data/test/behaviors/callbacks_test.rb +118 -0
- data/test/behaviors/component_test.rb +56 -0
- data/test/behaviors/input_pin_test.rb +42 -0
- data/test/behaviors/listener_test.rb +60 -0
- data/test/behaviors/multi_pin_test.rb +70 -0
- data/test/behaviors/output_pin_test.rb +27 -0
- data/test/behaviors/poller_test.rb +64 -0
- data/test/behaviors/reader_test.rb +68 -0
- data/test/behaviors/single_pin_test.rb +41 -0
- data/test/behaviors/subcomponents_test.rb +75 -0
- data/test/behaviors/threaded_test.rb +98 -0
- data/test/board/board_test.rb +130 -0
- data/test/board/core_test.rb +182 -0
- data/test/board/eeprom_test.rb +34 -0
- data/test/board/helper_test.rb +38 -0
- data/test/board/i2c_test.rb +114 -0
- data/test/board/infrared_test.rb +37 -0
- data/test/board/message_test.rb +54 -0
- data/test/board/one_wire_test.rb +69 -0
- data/test/board/pulse_test.rb +51 -0
- data/test/board/servo_test.rb +47 -0
- data/test/board/spi_test.rb +97 -0
- data/test/board/tone_test.rb +42 -0
- data/test/connection/serial_test.rb +172 -0
- data/test/connection/tcp_test.rb +37 -0
- data/test/digital_io/input_test.rb +65 -0
- data/test/digital_io/output_test.rb +64 -0
- data/test/digital_io/rotary_encoder_test.rb +99 -0
- data/test/display/hd44780_test.rb +23 -0
- data/test/eeprom/built_in_test.rb +61 -0
- data/test/i2c/bus_test.rb +66 -0
- data/test/i2c/peripheral_test.rb +50 -0
- data/test/led/base_test.rb +24 -0
- data/test/led/rgb_test.rb +64 -0
- data/test/led/seven_segment_test.rb +86 -0
- data/test/motor/servo_test.rb +62 -0
- data/test/motor/stepper_test.rb +51 -0
- data/test/one_wire/bus_enumerator_test.rb +134 -0
- data/test/one_wire/bus_test.rb +142 -0
- data/test/one_wire/helper_test.rb +18 -0
- data/test/one_wire/peripheral_test.rb +158 -0
- data/test/pulse_io/buzzer_test.rb +48 -0
- data/test/pulse_io/ir_transmitter_test.rb +38 -0
- data/test/pulse_io/pwm_output_test.rb +72 -0
- data/test/rtc/ds3231_test.rb +55 -0
- data/test/sensor/dht_test.rb +64 -0
- data/test/sensor/ds18b20_test.rb +107 -0
- data/test/spi/base_register_test.rb +34 -0
- data/test/spi/bus_test.rb +76 -0
- data/test/spi/input_register_test.rb +140 -0
- data/test/spi/output_register_test.rb +93 -0
- data/test/test_helper.rb +223 -0
- data/test/uart/bitbang_test.rb +37 -0
- data/tutorial/01-led/led.fzz +0 -0
- data/tutorial/01-led/led.pdf +0 -0
- data/tutorial/01-led/led.rb +73 -0
- data/tutorial/02-button/button.fzz +0 -0
- data/tutorial/02-button/button.pdf +0 -0
- data/tutorial/02-button/button.rb +64 -0
- data/tutorial/03-potentiometer/potentiometer.fzz +0 -0
- data/tutorial/03-potentiometer/potentiometer.pdf +0 -0
- data/tutorial/03-potentiometer/potentiometer.rb +62 -0
- 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 +66 -0
- 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 +58 -0
- data/tutorial/05-rgb_led/rgb_mapping.rb +76 -0
- data/vendor/board-maps/.gitignore +56 -0
- data/vendor/board-maps/.gitmodules +21 -0
- data/vendor/board-maps/BoardMap.h +1364 -0
- data/vendor/board-maps/README.md +51 -0
- data/vendor/board-maps/lib/boards_parser.rb +66 -0
- data/vendor/board-maps/lib/header_parser.rb +164 -0
- data/vendor/board-maps/run.rb +47 -0
- data/vendor/board-maps/yaml/0XCB_HELIOS.yml +48 -0
- data/vendor/board-maps/yaml/ADAFRUIT_FEATHER_ESP32S2.yml +25 -0
- data/vendor/board-maps/yaml/ADAFRUIT_FEATHER_ESP32S2_REVTFT.yml +25 -0
- data/vendor/board-maps/yaml/ADAFRUIT_FEATHER_ESP32S2_TFT.yml +27 -0
- data/vendor/board-maps/yaml/ADAFRUIT_FEATHER_ESP32S3.yml +29 -0
- data/vendor/board-maps/yaml/ADAFRUIT_FEATHER_ESP32S3_NOPSRAM.yml +29 -0
- data/vendor/board-maps/yaml/ADAFRUIT_FEATHER_ESP32S3_REVTFT.yml +25 -0
- data/vendor/board-maps/yaml/ADAFRUIT_FEATHER_ESP32S3_TFT.yml +27 -0
- data/vendor/board-maps/yaml/ADAFRUIT_FEATHER_ESP32_V2.yml +30 -0
- data/vendor/board-maps/yaml/ADAFRUIT_FEATHER_RP2040.yml +48 -0
- data/vendor/board-maps/yaml/ADAFRUIT_FEATHER_RP2040_CAN.yml +48 -0
- data/vendor/board-maps/yaml/ADAFRUIT_FEATHER_RP2040_DVI.yml +48 -0
- data/vendor/board-maps/yaml/ADAFRUIT_FEATHER_RP2040_PROP_MAKER.yml +48 -0
- data/vendor/board-maps/yaml/ADAFRUIT_FEATHER_RP2040_RFM.yml +48 -0
- data/vendor/board-maps/yaml/ADAFRUIT_FEATHER_RP2040_SCORPIO.yml +48 -0
- data/vendor/board-maps/yaml/ADAFRUIT_FEATHER_RP2040_THINKINK.yml +48 -0
- data/vendor/board-maps/yaml/ADAFRUIT_FEATHER_RP2040_USB_HOST.yml +48 -0
- data/vendor/board-maps/yaml/ADAFRUIT_ITSYBITSY_ESP32.yml +24 -0
- data/vendor/board-maps/yaml/ADAFRUIT_ITSYBITSY_RP2040.yml +48 -0
- data/vendor/board-maps/yaml/ADAFRUIT_KB2040_RP2040.yml +48 -0
- data/vendor/board-maps/yaml/ADAFRUIT_MACROPAD_RP2040.yml +48 -0
- data/vendor/board-maps/yaml/ADAFRUIT_MATRIXPORTAL_ESP32S3.yml +16 -0
- data/vendor/board-maps/yaml/ADAFRUIT_QTPY_ESP32C3.yml +12 -0
- data/vendor/board-maps/yaml/ADAFRUIT_QTPY_ESP32S2.yml +22 -0
- data/vendor/board-maps/yaml/ADAFRUIT_QTPY_ESP32S3_NOPSRAM.yml +20 -0
- data/vendor/board-maps/yaml/ADAFRUIT_QTPY_ESP32_PICO.yml +27 -0
- data/vendor/board-maps/yaml/ADAFRUIT_QTPY_RP2040.yml +48 -0
- data/vendor/board-maps/yaml/ADAFRUIT_STEMMAFRIEND_RP2040.yml +48 -0
- data/vendor/board-maps/yaml/ADAFRUIT_TRINKEYQT_RP2040.yml +48 -0
- data/vendor/board-maps/yaml/ALKS.yml +34 -0
- data/vendor/board-maps/yaml/AMPERKA_WIFI_SLOT.yml +16 -0
- data/vendor/board-maps/yaml/AVR_ADK.yml +24 -0
- data/vendor/board-maps/yaml/AVR_BT.yml +16 -0
- data/vendor/board-maps/yaml/AVR_CIRCUITPLAY.yml +14 -0
- data/vendor/board-maps/yaml/AVR_DUEMILANOVE.yml +16 -0
- data/vendor/board-maps/yaml/AVR_ESPLORA.yml +20 -0
- data/vendor/board-maps/yaml/AVR_ETHERNET.yml +16 -0
- data/vendor/board-maps/yaml/AVR_FIO.yml +16 -0
- data/vendor/board-maps/yaml/AVR_GEMMA.yml +6 -0
- data/vendor/board-maps/yaml/AVR_INDUSTRIAL101.yml +20 -0
- data/vendor/board-maps/yaml/AVR_LEONARDO.yml +20 -0
- data/vendor/board-maps/yaml/AVR_LEONARDO_ETH.yml +20 -0
- data/vendor/board-maps/yaml/AVR_LILYPAD.yml +16 -0
- data/vendor/board-maps/yaml/AVR_LILYPAD_USB.yml +20 -0
- data/vendor/board-maps/yaml/AVR_LININO_ONE.yml +20 -0
- data/vendor/board-maps/yaml/AVR_MEGA.yml +24 -0
- data/vendor/board-maps/yaml/AVR_MEGA2560.yml +24 -0
- data/vendor/board-maps/yaml/AVR_MICRO.yml +20 -0
- data/vendor/board-maps/yaml/AVR_MINI.yml +16 -0
- data/vendor/board-maps/yaml/AVR_NANO.yml +16 -0
- data/vendor/board-maps/yaml/AVR_NANO_EVERY.yml +22 -0
- data/vendor/board-maps/yaml/AVR_NG.yml +16 -0
- data/vendor/board-maps/yaml/AVR_PRO.yml +16 -0
- data/vendor/board-maps/yaml/AVR_ROBOT_CONTROL.yml +22 -0
- data/vendor/board-maps/yaml/AVR_ROBOT_MOTOR.yml +19 -0
- data/vendor/board-maps/yaml/AVR_UNO.yml +16 -0
- data/vendor/board-maps/yaml/AVR_UNO_WIFI_DEV_ED.yml +16 -0
- data/vendor/board-maps/yaml/AVR_UNO_WIFI_REV2.yml +22 -0
- data/vendor/board-maps/yaml/AVR_YUN.yml +20 -0
- data/vendor/board-maps/yaml/AVR_YUNMINI.yml +20 -0
- data/vendor/board-maps/yaml/AirM2M_CORE_ESP32C3.yml +14 -0
- data/vendor/board-maps/yaml/BEE_DATA_LOGGER.yml +39 -0
- data/vendor/board-maps/yaml/BPI_BIT.yml +9 -0
- data/vendor/board-maps/yaml/BPI_LEAF_S3.yml +31 -0
- data/vendor/board-maps/yaml/BRIDGETEK_IDM2040-7A.yml +48 -0
- data/vendor/board-maps/yaml/BeeMotionS3.yml +40 -0
- data/vendor/board-maps/yaml/Bee_Motion.yml +27 -0
- data/vendor/board-maps/yaml/Bee_Motion_Mini.yml +1 -0
- data/vendor/board-maps/yaml/Bee_S3.yml +38 -0
- data/vendor/board-maps/yaml/CHALLENGER_2040_LORA_RP2040.yml +39 -0
- data/vendor/board-maps/yaml/CHALLENGER_2040_LTE_RP2040.yml +38 -0
- data/vendor/board-maps/yaml/CHALLENGER_2040_NFC_RP2040.yml +32 -0
- data/vendor/board-maps/yaml/CHALLENGER_2040_SDRTC_RP2040.yml +36 -0
- data/vendor/board-maps/yaml/CHALLENGER_2040_SUBGHZ_RP2040.yml +39 -0
- data/vendor/board-maps/yaml/CHALLENGER_2040_UWB_RP2040.yml +39 -0
- data/vendor/board-maps/yaml/CHALLENGER_2040_WIFI_BLE_RP2040.yml +42 -0
- data/vendor/board-maps/yaml/CHALLENGER_2040_WIFI_RP2040.yml +38 -0
- data/vendor/board-maps/yaml/CHALLENGER_NB_2040_WIFI_RP2040.yml +38 -0
- data/vendor/board-maps/yaml/CRABIK_SLOT_ESP32_S3.yml +19 -0
- data/vendor/board-maps/yaml/CYTRON_MAKER_FEATHER_AIOT_S3.yml +26 -0
- data/vendor/board-maps/yaml/CYTRON_MAKER_NANO_RP2040.yml +48 -0
- data/vendor/board-maps/yaml/CYTRON_MAKER_PI_RP2040.yml +48 -0
- data/vendor/board-maps/yaml/CoreESP32.yml +49 -0
- data/vendor/board-maps/yaml/D1_MINI32.yml +36 -0
- data/vendor/board-maps/yaml/D1_UNO32.yml +28 -0
- data/vendor/board-maps/yaml/DATANOISETV_PICOADK.yml +48 -0
- data/vendor/board-maps/yaml/DENKY.yml +26 -0
- data/vendor/board-maps/yaml/DENKY_PICOV3.yml +26 -0
- data/vendor/board-maps/yaml/DENKY_WROOM32.yml +26 -0
- data/vendor/board-maps/yaml/DEPARTMENT_OF_ALCHEMY_MINIMAIN_ESP32S2.yml +26 -0
- data/vendor/board-maps/yaml/DFROBOT_BEETLE_ESP32_C3.yml +14 -0
- data/vendor/board-maps/yaml/DFROBOT_BEETLE_RP2040.yml +48 -0
- data/vendor/board-maps/yaml/DFROBOT_FIREBEETLE_2_ESP32E.yml +44 -0
- data/vendor/board-maps/yaml/DFROBOT_FIREBEETLE_2_ESP32S3.yml +38 -0
- data/vendor/board-maps/yaml/DFROBOT_ROMEO_ESP32S3.yml +7 -0
- data/vendor/board-maps/yaml/DPU_ESP32.yml +26 -0
- data/vendor/board-maps/yaml/DYDK.yml +38 -0
- data/vendor/board-maps/yaml/DYDK1A.yml +37 -0
- data/vendor/board-maps/yaml/DYDK1Av2.yml +45 -0
- data/vendor/board-maps/yaml/DYG.yml +20 -0
- data/vendor/board-maps/yaml/DYM.yml +40 -0
- data/vendor/board-maps/yaml/DYMv2.yml +39 -0
- data/vendor/board-maps/yaml/D_Duino_32.yml +29 -0
- data/vendor/board-maps/yaml/ELECTRONICCATS_HUNTERCAT_NFC.yml +44 -0
- data/vendor/board-maps/yaml/ESP320.yml +8 -0
- data/vendor/board-maps/yaml/ESP32C3_DEV.yml +14 -0
- data/vendor/board-maps/yaml/ESP32C3_M1_I_KIT.yml +13 -0
- data/vendor/board-maps/yaml/ESP32S2_DEV.yml +33 -0
- data/vendor/board-maps/yaml/ESP32S2_THING_PLUS.yml +34 -0
- data/vendor/board-maps/yaml/ESP32S2_USB.yml +33 -0
- data/vendor/board-maps/yaml/ESP32S3_CAM_LCD.yml +7 -0
- data/vendor/board-maps/yaml/ESP32S3_DEV.yml +38 -0
- data/vendor/board-maps/yaml/ESP32_DEV.yml +26 -0
- data/vendor/board-maps/yaml/ESP32_DEVKIT_LIPO.yml +26 -0
- data/vendor/board-maps/yaml/ESP32_EVB.yml +7 -0
- data/vendor/board-maps/yaml/ESP32_GATEWAY.yml +13 -0
- data/vendor/board-maps/yaml/ESP32_GATEWAY_C.yml +13 -0
- data/vendor/board-maps/yaml/ESP32_GATEWAY_E.yml +13 -0
- data/vendor/board-maps/yaml/ESP32_GATEWAY_F.yml +13 -0
- data/vendor/board-maps/yaml/ESP32_IOT_REDBOARD.yml +27 -0
- data/vendor/board-maps/yaml/ESP32_MICROMOD.yml +24 -0
- data/vendor/board-maps/yaml/ESP32_PICO.yml +26 -0
- data/vendor/board-maps/yaml/ESP32_POE.yml +7 -0
- data/vendor/board-maps/yaml/ESP32_POE_ISO.yml +7 -0
- data/vendor/board-maps/yaml/ESP32_S3_BOX.yml +16 -0
- data/vendor/board-maps/yaml/ESP32_S3_USB_OTG.yml +11 -0
- data/vendor/board-maps/yaml/ESP32_THING.yml +27 -0
- data/vendor/board-maps/yaml/ESP32_THING_PLUS.yml +30 -0
- data/vendor/board-maps/yaml/ESP32_THING_PLUS_C.yml +30 -0
- data/vendor/board-maps/yaml/ESP32_WROOM_DA.yml +26 -0
- data/vendor/board-maps/yaml/ESP32_WROVER_KIT.yml +26 -0
- data/vendor/board-maps/yaml/ESP8266_ADAFRUIT_HUZZAH.yml +9 -0
- data/vendor/board-maps/yaml/ESP8266_AGRUMINO_LEMON_V4.yml +8 -0
- data/vendor/board-maps/yaml/ESP8266_ARDUINO_PRIMO.yml +7 -0
- data/vendor/board-maps/yaml/ESP8266_ARDUINO_STAR_OTTO.yml +7 -0
- data/vendor/board-maps/yaml/ESP8266_ARDUINO_UNOWIFI.yml +9 -0
- data/vendor/board-maps/yaml/ESP8266_ESP01.yml +9 -0
- data/vendor/board-maps/yaml/ESP8266_ESP07.yml +20 -0
- data/vendor/board-maps/yaml/ESP8266_ESP12.yml +20 -0
- data/vendor/board-maps/yaml/ESP8266_ESP13.yml +17 -0
- data/vendor/board-maps/yaml/ESP8266_ESP210.yml +9 -0
- data/vendor/board-maps/yaml/ESP8266_ESPECTRO_CORE.yml +9 -0
- data/vendor/board-maps/yaml/ESP8266_ESPINO_ESP12.yml +9 -0
- data/vendor/board-maps/yaml/ESP8266_ESPINO_ESP13.yml +9 -0
- data/vendor/board-maps/yaml/ESP8266_ESPRESSO_LITE_V1.yml +9 -0
- data/vendor/board-maps/yaml/ESP8266_ESPRESSO_LITE_V2.yml +9 -0
- data/vendor/board-maps/yaml/ESP8266_GENERIC.yml +9 -0
- data/vendor/board-maps/yaml/ESP8266_INVENT_ONE.yml +22 -0
- data/vendor/board-maps/yaml/ESP8266_NODEMCU_ESP12.yml +20 -0
- data/vendor/board-maps/yaml/ESP8266_NODEMCU_ESP12E.yml +20 -0
- data/vendor/board-maps/yaml/ESP8266_OAK.yml +9 -0
- data/vendor/board-maps/yaml/ESP8266_PHOENIX_V1.yml +9 -0
- data/vendor/board-maps/yaml/ESP8266_PHOENIX_V2.yml +9 -0
- data/vendor/board-maps/yaml/ESP8266_SCHIRMILABS_EDUINO_WIFI.yml +25 -0
- data/vendor/board-maps/yaml/ESP8266_SONOFF_BASIC.yml +9 -0
- data/vendor/board-maps/yaml/ESP8266_SONOFF_S20.yml +9 -0
- data/vendor/board-maps/yaml/ESP8266_SONOFF_SV.yml +9 -0
- data/vendor/board-maps/yaml/ESP8266_SONOFF_TH.yml +9 -0
- data/vendor/board-maps/yaml/ESP8266_THING.yml +9 -0
- data/vendor/board-maps/yaml/ESP8266_THING_DEV.yml +9 -0
- data/vendor/board-maps/yaml/ESP8266_WEMOS_D1MINI.yml +18 -0
- data/vendor/board-maps/yaml/ESP8266_WEMOS_D1MINILITE.yml +18 -0
- data/vendor/board-maps/yaml/ESP8266_WEMOS_D1MINIPRO.yml +18 -0
- data/vendor/board-maps/yaml/ESP8266_WEMOS_D1R1.yml +25 -0
- data/vendor/board-maps/yaml/ESP8266_WEMOS_D1WROOM02.yml +18 -0
- data/vendor/board-maps/yaml/ESP8266_WIO_LINK.yml +9 -0
- data/vendor/board-maps/yaml/ESP8266_XINABOX_CW01.yml +9 -0
- data/vendor/board-maps/yaml/ESPECTRO32.yml +27 -0
- data/vendor/board-maps/yaml/ESPea32.yml +27 -0
- data/vendor/board-maps/yaml/ESPino32.yml +27 -0
- data/vendor/board-maps/yaml/ET-Board.yml +26 -0
- data/vendor/board-maps/yaml/EXTREMEELEXTRONICS_RC2040.yml +46 -0
- data/vendor/board-maps/yaml/Edgebox-ESP-100.yml +7 -0
- data/vendor/board-maps/yaml/FEATHERS2.yml +33 -0
- data/vendor/board-maps/yaml/FEATHERS2NEO.yml +30 -0
- data/vendor/board-maps/yaml/FEATHERS3.yml +29 -0
- data/vendor/board-maps/yaml/FEATHER_ESP32.yml +28 -0
- data/vendor/board-maps/yaml/FLYBOARD2040_CORE.yml +48 -0
- data/vendor/board-maps/yaml/FRANZININHO_WIFI.yml +33 -0
- data/vendor/board-maps/yaml/FRANZININHO_WIFI_MSC.yml +33 -0
- data/vendor/board-maps/yaml/FROG_ESP32.yml +26 -0
- data/vendor/board-maps/yaml/FUNHOUSE_ESP32S2.yml +22 -0
- data/vendor/board-maps/yaml/GEN4_IOD.yml +9 -0
- data/vendor/board-maps/yaml/GENERIC_RP2040.yml +48 -0
- data/vendor/board-maps/yaml/HEALTHYPI_4.yml +27 -0
- data/vendor/board-maps/yaml/HONEYLEMON.yml +27 -0
- data/vendor/board-maps/yaml/HORNBILL_ESP32_DEV.yml +27 -0
- data/vendor/board-maps/yaml/HORNBILL_ESP32_MINIMA.yml +16 -0
- data/vendor/board-maps/yaml/ILABS_2040_RPICO32_RP2040.yml +47 -0
- data/vendor/board-maps/yaml/IMBRIOS_LOGSENS_V1P1.yml +19 -0
- data/vendor/board-maps/yaml/INTOROBOT_ESP32_DEV.yml +34 -0
- data/vendor/board-maps/yaml/LILYGO_T_DISPLAY_S3.yml +26 -0
- data/vendor/board-maps/yaml/LOLIN32.yml +27 -0
- data/vendor/board-maps/yaml/LOLIN32_LITE.yml +27 -0
- data/vendor/board-maps/yaml/LOLIN_C3_MINI.yml +14 -0
- data/vendor/board-maps/yaml/LOLIN_D32.yml +27 -0
- data/vendor/board-maps/yaml/LOLIN_D32_PRO.yml +27 -0
- data/vendor/board-maps/yaml/LOLIN_S2_MINI.yml +34 -0
- data/vendor/board-maps/yaml/LOLIN_S2_PICO.yml +34 -0
- data/vendor/board-maps/yaml/LOLIN_S3.yml +32 -0
- data/vendor/board-maps/yaml/LOLIN_S3_MINI.yml +32 -0
- data/vendor/board-maps/yaml/LOLIN_S3_PRO.yml +32 -0
- data/vendor/board-maps/yaml/Lion_Bit_Dev_Board.yml +18 -0
- data/vendor/board-maps/yaml/LoPy.yml +27 -0
- data/vendor/board-maps/yaml/LoPy4.yml +27 -0
- data/vendor/board-maps/yaml/M5STACK_CORES3.yml +8 -0
- data/vendor/board-maps/yaml/M5STACK_Core2.yml +9 -0
- data/vendor/board-maps/yaml/M5STACK_FIRE.yml +10 -0
- data/vendor/board-maps/yaml/M5Stack-Timer-CAM.yml +10 -0
- data/vendor/board-maps/yaml/M5Stack_ATOM.yml +10 -0
- data/vendor/board-maps/yaml/M5Stack_ATOMS3.yml +7 -0
- data/vendor/board-maps/yaml/M5Stack_CoreInk.yml +9 -0
- data/vendor/board-maps/yaml/M5Stack_Core_ESP32.yml +10 -0
- data/vendor/board-maps/yaml/M5Stack_Station.yml +10 -0
- data/vendor/board-maps/yaml/M5Stick_C.yml +10 -0
- data/vendor/board-maps/yaml/MAGTAG29_ESP32S2.yml +21 -0
- data/vendor/board-maps/yaml/MELOPERO_COOKIE_RP2040.yml +48 -0
- data/vendor/board-maps/yaml/MELOPERO_SHAKE_RP2040.yml +48 -0
- data/vendor/board-maps/yaml/METRO_ESP32S2.yml +34 -0
- data/vendor/board-maps/yaml/MGBOT_IOTIK32A.yml +27 -0
- data/vendor/board-maps/yaml/MGBOT_IOTIK32B.yml +27 -0
- data/vendor/board-maps/yaml/MH_ET_LIVE_ESP32DEVKIT.yml +27 -0
- data/vendor/board-maps/yaml/MH_ET_LIVE_ESP32MINIKIT.yml +27 -0
- data/vendor/board-maps/yaml/MICROS2.yml +34 -0
- data/vendor/board-maps/yaml/MOD_WIFI_ESP8266.yml +9 -0
- data/vendor/board-maps/yaml/Metro.yml +8 -0
- data/vendor/board-maps/yaml/NANO32.yml +27 -0
- data/vendor/board-maps/yaml/NANO_RP2040_CONNECT.yml +35 -0
- data/vendor/board-maps/yaml/NEBULAS3.yml +33 -0
- data/vendor/board-maps/yaml/NEKOSYSTEMS_BL2040_MINI.yml +48 -0
- data/vendor/board-maps/yaml/NULLBITS_BIT_C_PRO.yml +48 -0
- data/vendor/board-maps/yaml/Node32s.yml +27 -0
- data/vendor/board-maps/yaml/NodeMCU_32S.yml +27 -0
- data/vendor/board-maps/yaml/ODROID_ESP32.yml +10 -0
- data/vendor/board-maps/yaml/ONEHORSE_ESP32_DEV.yml +24 -0
- data/vendor/board-maps/yaml/OROCA_EDUBOT.yml +33 -0
- data/vendor/board-maps/yaml/PIMORONI_PGA2040.yml +48 -0
- data/vendor/board-maps/yaml/PROS3.yml +28 -0
- data/vendor/board-maps/yaml/PYCOM_GPY.yml +27 -0
- data/vendor/board-maps/yaml/Piranha.yml +16 -0
- data/vendor/board-maps/yaml/Pocket32.yml +27 -0
- data/vendor/board-maps/yaml/QUANTUM.yml +26 -0
- data/vendor/board-maps/yaml/RASPBERRY_PI_PICO.yml +48 -0
- data/vendor/board-maps/yaml/RASPBERRY_PI_PICO_W.yml +48 -0
- data/vendor/board-maps/yaml/REDPILL_ESP32S3.yml +32 -0
- data/vendor/board-maps/yaml/RMP.yml +33 -0
- data/vendor/board-maps/yaml/SAMD_CIRCUITPLAYGROUND_EXPRESS.yml +12 -0
- data/vendor/board-maps/yaml/SAMD_MKR1000.yml +20 -0
- data/vendor/board-maps/yaml/SAMD_MKRFox1200.yml +19 -0
- data/vendor/board-maps/yaml/SAMD_MKRGSM1400.yml +15 -0
- data/vendor/board-maps/yaml/SAMD_MKRNB1500.yml +15 -0
- data/vendor/board-maps/yaml/SAMD_MKRVIDOR4000.yml +19 -0
- data/vendor/board-maps/yaml/SAMD_MKRWAN1300.yml +18 -0
- data/vendor/board-maps/yaml/SAMD_MKRWAN1310.yml +18 -0
- data/vendor/board-maps/yaml/SAMD_MKRWIFI1010.yml +19 -0
- data/vendor/board-maps/yaml/SAMD_MKRZERO.yml +19 -0
- data/vendor/board-maps/yaml/SAMD_NANO_33_IOT.yml +13 -0
- data/vendor/board-maps/yaml/SAMD_TIAN.yml +15 -0
- data/vendor/board-maps/yaml/SAMD_ZERO.yml +14 -0
- data/vendor/board-maps/yaml/SAM_DUE.yml +26 -0
- data/vendor/board-maps/yaml/SAM_ZERO.yml +15 -0
- data/vendor/board-maps/yaml/SEEED_INDICATOR_RP2040.yml +47 -0
- data/vendor/board-maps/yaml/SEEED_XIAO_RP2040.yml +29 -0
- data/vendor/board-maps/yaml/SOLDERPARTY_RP2040_STAMP.yml +48 -0
- data/vendor/board-maps/yaml/SONOFF_DUALR3.yml +26 -0
- data/vendor/board-maps/yaml/SPARKFUN_PROMICRO_RP2040.yml +48 -0
- data/vendor/board-maps/yaml/SPARKFUN_THINGPLUS_RP2040.yml +48 -0
- data/vendor/board-maps/yaml/STAMP_S3.yml +4 -0
- data/vendor/board-maps/yaml/TAMC_TERMOD_S3.yml +31 -0
- data/vendor/board-maps/yaml/TBEAM_USE_RADIO_SX1262.yml +23 -0
- data/vendor/board-maps/yaml/TBEAM_USE_RADIO_SX1268.yml +23 -0
- data/vendor/board-maps/yaml/TBEAM_USE_RADIO_SX1276.yml +23 -0
- data/vendor/board-maps/yaml/TBEAM_USE_RADIO_SX1278.yml +23 -0
- data/vendor/board-maps/yaml/TBEAM_USE_RADIO_SX1280.yml +23 -0
- data/vendor/board-maps/yaml/TBeam.yml +23 -0
- data/vendor/board-maps/yaml/TINYPICO.yml +26 -0
- data/vendor/board-maps/yaml/TINYS2.yml +33 -0
- data/vendor/board-maps/yaml/TINYS3.yml +25 -0
- data/vendor/board-maps/yaml/TTGO-T-OI-PLUS_DEV.yml +11 -0
- data/vendor/board-maps/yaml/TTGO_LoRa32_V1.yml +28 -0
- data/vendor/board-maps/yaml/TTGO_LoRa32_V2.yml +28 -0
- data/vendor/board-maps/yaml/TTGO_LoRa32_v21new.yml +28 -0
- data/vendor/board-maps/yaml/TTGO_T1.yml +27 -0
- data/vendor/board-maps/yaml/TTGO_T7_V13_Mini32.yml +27 -0
- data/vendor/board-maps/yaml/TTGO_T7_V14_Mini32.yml +27 -0
- data/vendor/board-maps/yaml/TWATCH_2020_V1.yml +10 -0
- data/vendor/board-maps/yaml/TWATCH_2020_V2.yml +10 -0
- data/vendor/board-maps/yaml/TWATCH_2020_V3.yml +10 -0
- data/vendor/board-maps/yaml/TWATCH_BASE.yml +10 -0
- data/vendor/board-maps/yaml/TWatch.yml +10 -0
- data/vendor/board-maps/yaml/Trueverit_ESP32_Universal_IoT_Driver.yml +18 -0
- data/vendor/board-maps/yaml/Trueverit_ESP32_Universal_IoT_Driver_MK_II.yml +18 -0
- data/vendor/board-maps/yaml/UBLOX_NINA_W10.yml +48 -0
- data/vendor/board-maps/yaml/UBLOX_NORA_W10.yml +43 -0
- data/vendor/board-maps/yaml/UPESY_RP2040_DEVKIT.yml +48 -0
- data/vendor/board-maps/yaml/VALTRACK_V4_MFW_ESP32_C3.yml +23 -0
- data/vendor/board-maps/yaml/VALTRACK_V4_VTS_ESP32_C3.yml +23 -0
- data/vendor/board-maps/yaml/VIYALAB_MIZU_RP2040.yml +48 -0
- data/vendor/board-maps/yaml/WATCHY.yml +7 -0
- data/vendor/board-maps/yaml/WATCHY_V10.yml +7 -0
- data/vendor/board-maps/yaml/WATCHY_V15.yml +7 -0
- data/vendor/board-maps/yaml/WATCHY_V20.yml +7 -0
- data/vendor/board-maps/yaml/WAVESHARE_RP2040_LCD_0_96.yml +47 -0
- data/vendor/board-maps/yaml/WAVESHARE_RP2040_LCD_1_28.yml +47 -0
- data/vendor/board-maps/yaml/WAVESHARE_RP2040_ONE.yml +47 -0
- data/vendor/board-maps/yaml/WAVESHARE_RP2040_PLUS.yml +48 -0
- data/vendor/board-maps/yaml/WAVESHARE_RP2040_ZERO.yml +47 -0
- data/vendor/board-maps/yaml/WESP32.yml +17 -0
- data/vendor/board-maps/yaml/WIDORA_AIR.yml +34 -0
- data/vendor/board-maps/yaml/WIFIDUINO_ESP8266.yml +23 -0
- data/vendor/board-maps/yaml/WIFINFO.yml +20 -0
- data/vendor/board-maps/yaml/WIPY3.yml +27 -0
- data/vendor/board-maps/yaml/WIZNET_5100S_EVB_PICO.yml +48 -0
- data/vendor/board-maps/yaml/WIZNET_5500_EVB_PICO.yml +48 -0
- data/vendor/board-maps/yaml/WIZNET_WIZFI360_EVB_PICO.yml +48 -0
- data/vendor/board-maps/yaml/WT32_ETH01.yml +8 -0
- data/vendor/board-maps/yaml/WiFiduino32S3.yml +27 -0
- data/vendor/board-maps/yaml/WiFiduinoV2.yml +27 -0
- data/vendor/board-maps/yaml/Wifiduino32.yml +40 -0
- data/vendor/board-maps/yaml/XIAO_ESP32C3.yml +22 -0
- data/vendor/board-maps/yaml/XIAO_ESP32S3.yml +36 -0
- data/vendor/board-maps/yaml/YD_RP2040.yml +48 -0
- data/vendor/board-maps/yaml/atmegazero_esp32s2.yml +30 -0
- data/vendor/board-maps/yaml/connaxio_espoir.yml +18 -0
- data/vendor/board-maps/yaml/esp32vn_iot_uno.yml +22 -0
- data/vendor/board-maps/yaml/fm_devkit.yml +15 -0
- data/vendor/board-maps/yaml/heltec_wifi_32_lora_V3.yml +31 -0
- data/vendor/board-maps/yaml/heltec_wifi_kit_32.yml +28 -0
- data/vendor/board-maps/yaml/heltec_wifi_kit_32_V3.yml +32 -0
- data/vendor/board-maps/yaml/heltec_wifi_lora_32.yml +27 -0
- data/vendor/board-maps/yaml/heltec_wifi_lora_32_V2.yml +27 -0
- data/vendor/board-maps/yaml/heltec_wireless_stick.yml +27 -0
- data/vendor/board-maps/yaml/heltec_wireless_stick_LITE.yml +27 -0
- data/vendor/board-maps/yaml/openkb.yml +27 -0
- data/vendor/board-maps/yaml/roboheart_hercules.yml +17 -0
- data/vendor/board-maps/yaml/sensesiot_weizen.yml +26 -0
- data/vendor/board-maps/yaml/uPesy_WROOM.yml +27 -0
- data/vendor/board-maps/yaml/uPesy_WROVER.yml +27 -0
- data/vendor/board-maps/yaml/unphone8.yml +32 -0
- data/vendor/board-maps/yaml/unphone9.yml +32 -0
- data/vendor/board-maps/yaml/wifi_kit_8.yml +15 -0
- metadata +800 -0
@@ -0,0 +1,48 @@
|
|
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
|
@@ -0,0 +1,74 @@
|
|
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
|
+
ads1118 = 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(12, " ")} | "
|
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 = ads1118.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
|
+
ads1118.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
|
+
#
|
53
|
+
# Gain and sample rate bitmasks can be found in the datasheet.
|
54
|
+
#
|
55
|
+
# Input on pin 0, with pin 1 as differential negative input, and 6.144 V full range.
|
56
|
+
diff_input = Denko::AnalogIO::Input.new(adc: ads1118, pin: 0, negative_pin: 1, gain: 0b000)
|
57
|
+
|
58
|
+
# Input on pin 2 with no negative input (single ended), and 1.024V full range.
|
59
|
+
# Ths one uses a 8 SPS rate, essentially 16x oversampling compared to the default 128.
|
60
|
+
single_input = Denko::AnalogIO::Input.new(adc: ads1118, pin: 2, gain: 0b011, sample_rate: 0b000)
|
61
|
+
|
62
|
+
# Poll the differential input every second.
|
63
|
+
diff_input.poll(1) do |reading|
|
64
|
+
voltage = reading * diff_input.volts_per_bit
|
65
|
+
print_reading("Differential", reading, voltage)
|
66
|
+
end
|
67
|
+
|
68
|
+
# Poll the single ended input every 2 seconds.
|
69
|
+
single_input.poll(2) do |reading|
|
70
|
+
voltage = reading * single_input.volts_per_bit
|
71
|
+
print_reading("Single", reading, voltage)
|
72
|
+
end
|
73
|
+
|
74
|
+
sleep
|
@@ -0,0 +1,32 @@
|
|
1
|
+
#
|
2
|
+
# Example looping the Arduino Zero's DAC back into one of its ADC pins.
|
3
|
+
#
|
4
|
+
require 'bundler/setup'
|
5
|
+
require 'denko'
|
6
|
+
|
7
|
+
#
|
8
|
+
# For the Arduino Zero: 'DAC0' = 'A0' = GPIO14.
|
9
|
+
# For the ESP32 V1: 'DAC0' = GPIO25, 'DAC1' = GPIO26, `ADC1_4` = 32
|
10
|
+
#
|
11
|
+
# Connect DAC_PIN TO ADC_PIN with a jumper to test.
|
12
|
+
#
|
13
|
+
DAC_PIN = 'DAC0'
|
14
|
+
ADC_PIN = 'A5'
|
15
|
+
|
16
|
+
board = Denko::Board.new(Denko::Connection::Serial.new)
|
17
|
+
dac = Denko::AnalogIO::Output.new(pin: DAC_PIN, board: board)
|
18
|
+
adc = Denko::AnalogIO::Input.new(pin: ADC_PIN, board: board)
|
19
|
+
|
20
|
+
#
|
21
|
+
# Read values should be approximately 4x the written values, since Board#new tries to
|
22
|
+
# set output resolution at 8-bits and input to 10-bits. Not configurable on all chips.
|
23
|
+
# Scale may be off but, readings should still be proportional.
|
24
|
+
#
|
25
|
+
[0, 32, 64, 128, 192, 255].each do |output_value|
|
26
|
+
dac.write output_value
|
27
|
+
sleep 1
|
28
|
+
loopback_value = adc.read
|
29
|
+
puts "ADC reads: #{loopback_value} when DAC writes: #{output_value}"
|
30
|
+
end
|
31
|
+
|
32
|
+
board.finish_write
|
@@ -0,0 +1,52 @@
|
|
1
|
+
#
|
2
|
+
# This is an example of how to use the sensor class
|
3
|
+
# You must register data callbacks and have the main thread
|
4
|
+
# sleep or in someway keep running or your program
|
5
|
+
# will exit before any callbacks can be called
|
6
|
+
#
|
7
|
+
require 'bundler/setup'
|
8
|
+
require 'denko'
|
9
|
+
|
10
|
+
board = Denko::Board.new(Denko::Connection::Serial.new)
|
11
|
+
sensor = Denko::AnalogIO::Sensor.new(pin: 'A0', board: board)
|
12
|
+
|
13
|
+
# Single read with block as callback. Blocks main thread.
|
14
|
+
# Callback fires only once then is removed automatically.
|
15
|
+
sensor.read { |value| puts "#{Time.now} Single read: #{value}" }
|
16
|
+
|
17
|
+
# Poll the sensor every 1 second with block as callback. Does not block main thread.
|
18
|
+
# Callback fires every time data is received until #stop is called.
|
19
|
+
sensor.poll(1) { |value| puts "#{Time.now} Polling: #{value}" }
|
20
|
+
sleep 5
|
21
|
+
|
22
|
+
# Stop polling. Automatically removes the callback from the #poll block.
|
23
|
+
sensor.stop
|
24
|
+
|
25
|
+
# Continuous listen with block as callback. Fires every time data is received until #stop is called.
|
26
|
+
sensor.listen { |value| puts "#{Time.now} Listening: #{value}" }
|
27
|
+
sleep 0.5
|
28
|
+
|
29
|
+
# Stop listening. Automatically removes the callback from the #listen block.
|
30
|
+
sensor.stop
|
31
|
+
|
32
|
+
# Add a persistent callback.
|
33
|
+
sensor.on_data { |value| puts "#{Time.now} Persistent callback: #{value}" }
|
34
|
+
|
35
|
+
# Add a callback with a custom key.
|
36
|
+
sensor.on_data(:test) { |value| puts "#{Time.now} Keyed callback: #{value}"}
|
37
|
+
|
38
|
+
# Single read again. Block given fires only once. Callbacks added with #on_data fire also.
|
39
|
+
sensor.read { |value| puts "#{Time.now} Single read again: #{value}" }
|
40
|
+
|
41
|
+
# Continuous listen. Block fires each time. Callbacks added with #on_data continue to fire.
|
42
|
+
sensor.listen { |value| puts "#{Time.now } Listening again: #{value}" }
|
43
|
+
sleep 0.5
|
44
|
+
|
45
|
+
# Stop listening. Automatically removes the callback from the #listen block.
|
46
|
+
sensor.stop
|
47
|
+
|
48
|
+
# Remove callbacks keyed with :test.
|
49
|
+
sensor.remove_callbacks(:test)
|
50
|
+
|
51
|
+
# Remove all callbacks.
|
52
|
+
sensor.remove_callbacks
|
@@ -0,0 +1,34 @@
|
|
1
|
+
require 'bundler/setup'
|
2
|
+
require 'denko'
|
3
|
+
#
|
4
|
+
# This example shows how to use denko when connecting to a board via TCP.
|
5
|
+
# This applies to the WiFi and Ethernet sketches, or serial sketch + ser2net.
|
6
|
+
# Port number defaults to 3466 (denko), but may be given as a second argument.
|
7
|
+
# It must correspond to the listening port set when the board was flashed.
|
8
|
+
#
|
9
|
+
connection = Denko::Connection::TCP.new("192.168.0.77", 3466)
|
10
|
+
# connection = Denko::Connection::TCP.new("127.0.0.1")
|
11
|
+
# connection = Denko::Connection::TCP.new("192.168.1.2", 3466)
|
12
|
+
#
|
13
|
+
board = Denko::Board.new(connection)
|
14
|
+
led = Denko::Led.new(pin: 13, board: board)
|
15
|
+
|
16
|
+
[:on, :off].cycle do |switch|
|
17
|
+
led.send(switch)
|
18
|
+
sleep 0.5
|
19
|
+
end
|
20
|
+
#
|
21
|
+
# ser2net can be used to simulate a TCP interface from a board running denko serial.
|
22
|
+
# It serves the serial interface over a TCP port from the machine running ser2net.
|
23
|
+
#
|
24
|
+
# Example ser2net command for an Arduino UNO connected to a Mac:
|
25
|
+
# ser2net -u -C "3466:raw:0:/dev/cu.usbmodem621:115200"
|
26
|
+
#
|
27
|
+
# Tell denko to connect to the IP address of the Mac, at port 3466.
|
28
|
+
# Note: ser2net should be used in raw TCP mode, not telnet mode (more common).
|
29
|
+
#
|
30
|
+
# Replace /dev/cu.usbmodem621 with your denko serial device.
|
31
|
+
# Arduino UNOs should be something like /dev/ttyACM0 under Linux.
|
32
|
+
#
|
33
|
+
# http://sourceforge.net/projects/ser2net/ for more info on installing and configuring ser2net.
|
34
|
+
#
|
@@ -0,0 +1,26 @@
|
|
1
|
+
#
|
2
|
+
# Example of a smiple rotary encoder polling at ~1ms.
|
3
|
+
#
|
4
|
+
# WARNING: This method is not precise at all. Please do not use it for anything
|
5
|
+
# that requires all steps to be read for precise positioning or high speed.
|
6
|
+
#
|
7
|
+
require 'bundler/setup'
|
8
|
+
require 'denko'
|
9
|
+
|
10
|
+
board = Denko::Board.new(Denko::Connection::Serial.new)
|
11
|
+
encoder = Denko::DigitalIO::RotaryEncoder.new board: board,
|
12
|
+
pins: { clock: 4, data: 5 },
|
13
|
+
divider: 1, # default, reads each pin every 1ms
|
14
|
+
steps_per_revolution: 30 # default
|
15
|
+
|
16
|
+
# Reverse direction if needed.
|
17
|
+
# encoder.reverse
|
18
|
+
|
19
|
+
# Reset angle and steps to 0.
|
20
|
+
encoder.reset
|
21
|
+
|
22
|
+
encoder.add_callback do |state|
|
23
|
+
puts "Encoder moved #{state[:change]} steps | CW step count: #{state[:steps]} | Current angle: #{state[:angle]}\xC2\xB0"
|
24
|
+
end
|
25
|
+
|
26
|
+
sleep
|
Binary file
|
@@ -0,0 +1,39 @@
|
|
1
|
+
#
|
2
|
+
# This example writes "Hello World!" in the display
|
3
|
+
#
|
4
|
+
require 'bundler/setup'
|
5
|
+
require 'denko'
|
6
|
+
|
7
|
+
board = Denko::Board.new(Denko::Connection::Serial.new)
|
8
|
+
lcd = Denko::Display::HD44780.new board: board,
|
9
|
+
pins: { rs: 8, enable: 9, d4: 4, d5: 5, d6: 6, d7: 7 },
|
10
|
+
cols: 16,
|
11
|
+
rows: 2
|
12
|
+
|
13
|
+
# Bitmap for a custom character. 5 bits wide x 8 high.
|
14
|
+
# Useful for generating these: https://omerk.github.io/lcdchargen/
|
15
|
+
heart = [ 0b00000,
|
16
|
+
0b00000,
|
17
|
+
0b01010,
|
18
|
+
0b11111,
|
19
|
+
0b11111,
|
20
|
+
0b01110,
|
21
|
+
0b00100,
|
22
|
+
0b00000 ]
|
23
|
+
|
24
|
+
# Define the character in CGRAM address 2. 0-7 are usable.
|
25
|
+
lcd.create_char(2, heart)
|
26
|
+
|
27
|
+
# Need to call home/clear/set_cursor so we go back to writing DDRAM.
|
28
|
+
lcd.home
|
29
|
+
|
30
|
+
# End the first line with the heart by writing its CGRAM address.
|
31
|
+
lcd.print "Hello World! "
|
32
|
+
lcd.write(2)
|
33
|
+
|
34
|
+
# Display a clock on second line, updating approximately every second.
|
35
|
+
loop do
|
36
|
+
lcd.move_to 0,1
|
37
|
+
lcd.print(Time.now.strftime("%I:%M:%S"))
|
38
|
+
sleep 1
|
39
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
#
|
2
|
+
# Example using an SSD1306 driven OLED screen over I2C.
|
3
|
+
#
|
4
|
+
require 'bundler/setup'
|
5
|
+
require 'denko'
|
6
|
+
|
7
|
+
board = Denko::Board.new(Denko::Connection::Serial.new)
|
8
|
+
|
9
|
+
#
|
10
|
+
# Default pins for the I2C0 (first) interface on most chips:
|
11
|
+
#
|
12
|
+
# ATmega 328p: SDA = 'A4' SCL = 'A5' - Arduino Uno, Nano
|
13
|
+
# ATmega 32u4: SDA = 2 SCL = 3 - Arduino Leonardo, Pro Micro
|
14
|
+
# ATmega1280 / 2560: SDA = 20 SCL = 21 - Arduino Mega
|
15
|
+
# SAM3X8E: SDA = 20 SCL = 21 - Arduino Due
|
16
|
+
# SAMD21G18: SDA = 20 SCL = 21 - Arduino Zero, M0, M0 Pro
|
17
|
+
# ESP8266: SDA = 4 SCL = 5
|
18
|
+
# ESP32: SDA = 21 SCL = 22
|
19
|
+
# RP2040: SDA = 4 SCL = 5 - Raspberry Pi Pico (W)
|
20
|
+
#
|
21
|
+
# Only give the SDA pin of the I2C bus. SCL (clock) pin must be
|
22
|
+
# connected for it to work, but we don't need to control it.
|
23
|
+
#
|
24
|
+
bus = Denko::I2C::Bus.new(board: board, pin: 'A4')
|
25
|
+
oled = Denko::Display::SSD1306.new(bus: bus, rotate: true)
|
26
|
+
canvas = oled.canvas
|
27
|
+
|
28
|
+
# Draw some text on the OLED's canvas (a Ruby memory buffer).
|
29
|
+
canvas.text_cursor = [27,60]
|
30
|
+
canvas.print("Hello World!")
|
31
|
+
|
32
|
+
# Add some shapes to the canvas.
|
33
|
+
baseline = 40
|
34
|
+
canvas.rectangle(10, baseline, 30, -30)
|
35
|
+
canvas.circle(66, baseline - 15, 15)
|
36
|
+
canvas.triangle(87, baseline, 117, baseline, 102, baseline - 30)
|
37
|
+
|
38
|
+
# Send the canvas to the OLED's graphics RAM so it shows.
|
39
|
+
oled.draw
|
40
|
+
board.finish_write
|
@@ -0,0 +1,29 @@
|
|
1
|
+
#
|
2
|
+
# Example using the SSD1306 OLED built into the LOLIN ES32-S2 PICO
|
3
|
+
#
|
4
|
+
require 'bundler/setup'
|
5
|
+
require 'denko'
|
6
|
+
|
7
|
+
board = Denko::Board.new(Denko::Connection::Serial.new)
|
8
|
+
|
9
|
+
# The OLED's reset pin on this board isn't tied high. Do it manually.
|
10
|
+
reset = Denko::DigitalIO::Output.new(board: board, pin: 18)
|
11
|
+
reset.high
|
12
|
+
|
13
|
+
bus = Denko::I2C::Bus.new(board: board, pin: :SDA)
|
14
|
+
oled = Denko::Display::SSD1306.new(bus: bus, width: 128, height: 32)
|
15
|
+
canvas = oled.canvas
|
16
|
+
|
17
|
+
# Draw some text on the OLED's canvas (a Ruby memory buffer).
|
18
|
+
canvas.text_cursor = [27,31]
|
19
|
+
canvas.print("Hello World!")
|
20
|
+
|
21
|
+
# Add some shapes to the canvas.
|
22
|
+
baseline = 15
|
23
|
+
canvas.rectangle(10, baseline, 15, -15)
|
24
|
+
canvas.circle(66, baseline - 7, 8)
|
25
|
+
canvas.triangle(102, baseline, 118, baseline, 110, baseline - 15)
|
26
|
+
|
27
|
+
# Send the canvas to the OLED's graphics RAM so it shows.
|
28
|
+
oled.draw
|
29
|
+
board.finish_write
|
@@ -0,0 +1,32 @@
|
|
1
|
+
#
|
2
|
+
# Example showing how to load, modify and save the board's EEPROM.
|
3
|
+
#
|
4
|
+
require 'bundler/setup'
|
5
|
+
require 'denko'
|
6
|
+
|
7
|
+
board = Denko::Board.new(Denko::Connection::Serial.new)
|
8
|
+
|
9
|
+
# Initialization automatically gets all EEPROM data from the board.
|
10
|
+
# eeprom = Denko::EEPROM::BuiltIn(board: board)
|
11
|
+
eeprom = board.eeprom
|
12
|
+
|
13
|
+
# EEPROM size reported by the board.
|
14
|
+
puts "EEPROM Size: #{eeprom.length} bytes"
|
15
|
+
|
16
|
+
# Write values like an array.
|
17
|
+
eeprom[0] = 128
|
18
|
+
eeprom[1] = 127
|
19
|
+
|
20
|
+
# Changes do not save to the board automatically.
|
21
|
+
# Call #save to write to the board, and automatically reload from it.
|
22
|
+
eeprom.save
|
23
|
+
|
24
|
+
# Read values like an array.
|
25
|
+
puts "Address 0 contains: #{eeprom[0]}"
|
26
|
+
|
27
|
+
# Enumerate like an array.
|
28
|
+
eeprom.each_with_index do |byte, address|
|
29
|
+
if address == 1
|
30
|
+
puts "Address #{address} contains #{byte}"
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
#
|
2
|
+
# Example that shows the default I2C bus pins, and addresses of any
|
3
|
+
# devices connected to the bus.
|
4
|
+
#
|
5
|
+
require 'bundler/setup'
|
6
|
+
require 'denko'
|
7
|
+
|
8
|
+
# Method to let the user set I2C pins.
|
9
|
+
def enter_pins
|
10
|
+
puts "Please manually specify I2C pins..."
|
11
|
+
print "I2C SDA pin: "; sda = gets
|
12
|
+
print "I2C SCL pin: "; scl = gets
|
13
|
+
puts
|
14
|
+
[sda.to_i, scl.to_i]
|
15
|
+
end
|
16
|
+
|
17
|
+
board = Denko::Board.new(Denko::Connection::Serial.new)
|
18
|
+
|
19
|
+
# If no board map, ask user to set pins manually.
|
20
|
+
unless board.map
|
21
|
+
puts "Error: Pin map not available for this board"
|
22
|
+
sda, scl = enter_pins
|
23
|
+
|
24
|
+
# Else get defaults from map.
|
25
|
+
else
|
26
|
+
sda = board.map[:SDA] || board.map[:SDA0]
|
27
|
+
scl = board.map[:SCL] || board.map[:SCL0]
|
28
|
+
|
29
|
+
# If not in map, ask user to set manually.
|
30
|
+
unless sda && scl
|
31
|
+
puts "Error: I2C pins not found in this board's pin map"
|
32
|
+
sda, scl = enter_pins
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
puts "Using I2C interface on pins #{sda} (SDA) and #{scl} (SCL)"
|
37
|
+
puts
|
38
|
+
|
39
|
+
bus = Denko::I2C::Bus.new(board: board, pin: sda)
|
40
|
+
bus.search
|
41
|
+
|
42
|
+
if bus.found_devices.empty?
|
43
|
+
puts "No devices found on I2C bus"
|
44
|
+
else
|
45
|
+
puts "I2C device addresses found:"
|
46
|
+
bus.found_devices.each do |address|
|
47
|
+
# Print as hexadecimal.
|
48
|
+
puts "0x#{address.to_s(16).upcase}"
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
puts
|
53
|
+
board.finish_write
|
@@ -0,0 +1,33 @@
|
|
1
|
+
#
|
2
|
+
# Walk a single pixel along the length of an APA102 strip and back,
|
3
|
+
# changing color each time it returns to position 0.
|
4
|
+
#
|
5
|
+
require 'bundler/setup'
|
6
|
+
require 'denko'
|
7
|
+
|
8
|
+
RED = [255, 0, 0]
|
9
|
+
GREEN = [0, 255, 0]
|
10
|
+
BLUE = [0, 0, 255]
|
11
|
+
WHITE = [255, 255, 255]
|
12
|
+
COLORS = [RED, GREEN, BLUE, WHITE]
|
13
|
+
PIXELS = 8
|
14
|
+
|
15
|
+
# Move along the strip and back, one pixel at a time.
|
16
|
+
positions = (0..PIXELS-1).to_a + (1..PIXELS-2).to_a.reverse
|
17
|
+
|
18
|
+
board = Denko::Board.new(Denko::Connection::Serial.new)
|
19
|
+
|
20
|
+
# Use the default hardware SPI bus.
|
21
|
+
bus = Denko::SPI::Bus.new(board: board)
|
22
|
+
strip = Denko::LED::APA102.new(bus: bus, length: PIXELS)
|
23
|
+
|
24
|
+
loop do
|
25
|
+
COLORS.each do |color|
|
26
|
+
positions.each do |index|
|
27
|
+
strip.clear
|
28
|
+
strip[index] = color
|
29
|
+
strip.show
|
30
|
+
sleep 0.05
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
#
|
2
|
+
# Walk a single pixel along the length of an APA102 strip and back,
|
3
|
+
# changing color each time it returns to position 0.
|
4
|
+
#
|
5
|
+
require 'bundler/setup'
|
6
|
+
require 'denko'
|
7
|
+
|
8
|
+
RED = [255, 0, 0]
|
9
|
+
GREEN = [0, 255, 0]
|
10
|
+
BLUE = [0, 0, 255]
|
11
|
+
WHITE = [255, 255, 255]
|
12
|
+
COLORS = [RED, GREEN, BLUE, WHITE]
|
13
|
+
PIXELS = 3
|
14
|
+
|
15
|
+
# Get all the brightness values as an array.
|
16
|
+
brightness_steps = (0..31).to_a
|
17
|
+
|
18
|
+
board = Denko::Board.new(Denko::Connection::Serial.new)
|
19
|
+
|
20
|
+
# Use the default hardware SPI bus.
|
21
|
+
bus = Denko::SPI::Bus.new(board: board)
|
22
|
+
strip = Denko::LED::APA102.new(bus: bus, length: PIXELS)
|
23
|
+
|
24
|
+
# Test global brightness control first.
|
25
|
+
strip[0] = RED
|
26
|
+
strip[1] = GREEN
|
27
|
+
strip[2] = BLUE
|
28
|
+
|
29
|
+
# Fade up from 0 brightness then back down.
|
30
|
+
(brightness_steps + brightness_steps.reverse).each do |value|
|
31
|
+
strip.brightness = value
|
32
|
+
strip.show
|
33
|
+
sleep 0.05
|
34
|
+
end
|
35
|
+
|
36
|
+
# Test per-pixel brightness by fading different pixels different directions.
|
37
|
+
loop do
|
38
|
+
(brightness_steps + brightness_steps.reverse).each do |value|
|
39
|
+
strip[0] = RED + [value]
|
40
|
+
strip[1] = GREEN + [31 - value]
|
41
|
+
strip[2] = BLUE + [value]
|
42
|
+
strip.show
|
43
|
+
sleep 0.1
|
44
|
+
end
|
45
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
#
|
2
|
+
# Blink example for standard built-in LEDs named :LED_BUILTIN
|
3
|
+
#
|
4
|
+
require 'bundler/setup'
|
5
|
+
require 'denko'
|
6
|
+
|
7
|
+
board = Denko::Board.new(Denko::Connection::Serial.new)
|
8
|
+
led = Denko::LED.new(board: board, pin: :LED_BUILTIN)
|
9
|
+
|
10
|
+
led.blink 0.5
|
11
|
+
|
12
|
+
sleep
|
@@ -0,0 +1,15 @@
|
|
1
|
+
#
|
2
|
+
# This is an example of how to use the ssd class
|
3
|
+
#
|
4
|
+
require 'bundler/setup'
|
5
|
+
require 'denko'
|
6
|
+
|
7
|
+
board = Denko::Board.new(Denko::Connection::Serial.new)
|
8
|
+
ssd = Denko::LED::SevenSegment.new board: board,
|
9
|
+
pins: { cathode: 10, a: 3, b: 4, c: 5, d: 6, e: 7, f: 8, g: 9 }
|
10
|
+
|
11
|
+
# Turn off the ssd on exit
|
12
|
+
trap("SIGINT") { exit !ssd.off }
|
13
|
+
|
14
|
+
# Display each new line on the ssd
|
15
|
+
loop { ssd.display(gets.chomp) }
|
@@ -0,0 +1,32 @@
|
|
1
|
+
#
|
2
|
+
# Walk a single pixel along the length of a WS2812 strip and back,
|
3
|
+
# changing color each time it returns to position 0.
|
4
|
+
#
|
5
|
+
require 'bundler/setup'
|
6
|
+
require 'denko'
|
7
|
+
|
8
|
+
RED = [255, 0, 0]
|
9
|
+
GREEN = [0, 255, 0]
|
10
|
+
BLUE = [0, 0, 255]
|
11
|
+
WHITE = [255, 255, 255]
|
12
|
+
COLORS = [RED, GREEN, BLUE, WHITE]
|
13
|
+
|
14
|
+
WS2812_PIN = 4
|
15
|
+
PIXELS = 8
|
16
|
+
|
17
|
+
# Move along the strip and back, one pixel at a time.
|
18
|
+
positions = (0..PIXELS-1).to_a + (1..PIXELS-2).to_a.reverse
|
19
|
+
|
20
|
+
board = Denko::Board.new(Denko::Connection::Serial.new)
|
21
|
+
strip = Denko::LED::WS2812.new(board: board, pin: WS2812_PIN, length: PIXELS)
|
22
|
+
|
23
|
+
loop do
|
24
|
+
COLORS.each do |color|
|
25
|
+
positions.each do |index|
|
26
|
+
strip.clear
|
27
|
+
strip[index] = color
|
28
|
+
strip.show
|
29
|
+
sleep 0.05
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
#
|
2
|
+
# Blink example for the LOLIN ESP32 S3 or C3, or any board where
|
3
|
+
# :LED_BUILTIN is the data pin for a single on-board WS2812.
|
4
|
+
#
|
5
|
+
require 'bundler/setup'
|
6
|
+
require 'denko'
|
7
|
+
|
8
|
+
WHITE = [255, 255, 255]
|
9
|
+
OFF = [0, 0, 0]
|
10
|
+
|
11
|
+
board = Denko::Board.new(Denko::Connection::Serial.new)
|
12
|
+
strip = Denko::LED::WS2812.new(board: board, pin: :LED_BUILTIN, length: 1)
|
13
|
+
|
14
|
+
loop do
|
15
|
+
strip[0] = WHITE
|
16
|
+
strip.show
|
17
|
+
sleep 0.5
|
18
|
+
strip[0] = OFF
|
19
|
+
strip.show
|
20
|
+
sleep 0.5
|
21
|
+
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
#
|
2
|
+
# Example driving a DC motor with a L298 H-Bridge driver.
|
3
|
+
#
|
4
|
+
require 'bundler/setup'
|
5
|
+
require 'denko'
|
6
|
+
board = Denko::Board.new(Denko::Connection::Serial.new)
|
7
|
+
|
8
|
+
# This is only 1 channel of the driver. Make a new object for each channel.
|
9
|
+
motor = Denko::Motor::L298.new board: board, pins: {direction1: 8, direction2: 9, enable: 10}
|
10
|
+
|
11
|
+
# Off without braking (initial state).
|
12
|
+
# motor.off
|
13
|
+
# motor.idle
|
14
|
+
|
15
|
+
# Go forward at half speed for a while.
|
16
|
+
motor.forward board.pwm_high / 2
|
17
|
+
sleep 2
|
18
|
+
|
19
|
+
# Change direction.
|
20
|
+
motor.reverse board.pwm_high / 2
|
21
|
+
sleep 2
|
22
|
+
|
23
|
+
# Speed up without changing direction.
|
24
|
+
motor.speed = board.pwm_high
|
25
|
+
sleep 2
|
26
|
+
|
27
|
+
# Brake to stop quickly.
|
28
|
+
motor.brake
|
29
|
+
sleep 1
|
30
|
+
|
31
|
+
# Change from brake to forward, but 0 speed.
|
32
|
+
motor.forward 0
|
33
|
+
sleep 1
|
34
|
+
|
35
|
+
# Gradually speed up.
|
36
|
+
(1..20).each do |step|
|
37
|
+
sleep 0.5
|
38
|
+
motor.speed = (board.pwm_high * (step / 20.0)).round
|
39
|
+
end
|
40
|
+
|
41
|
+
# Turn it off.
|
42
|
+
motor.off
|
43
|
+
board.finish_write
|