denko 0.13.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|