denko 0.13.6 → 0.15.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.github/workflows/{build_avr.yml → build_atmega_avr.yml} +19 -18
- data/.github/workflows/{build_megaavr.yml → build_atmega_megaavr.yml} +19 -18
- data/.github/workflows/{build_sam3x.yml → build_atsam3x.yml} +18 -17
- data/.github/workflows/{build_samd.yml → build_atsamd21.yml} +19 -18
- data/.github/workflows/build_esp32.yml +19 -18
- data/.github/workflows/build_esp32c3.yml +58 -0
- data/.github/workflows/build_esp32c6.yml +59 -0
- data/.github/workflows/build_esp32h2.yml +58 -0
- data/.github/workflows/build_esp32s2.yml +59 -0
- data/.github/workflows/build_esp32s3.yml +59 -0
- data/.github/workflows/build_esp8266.yml +16 -15
- data/.github/workflows/build_ra4m1.yml +17 -16
- data/.github/workflows/build_rp2040.yml +19 -17
- data/.github/workflows/ruby.yml +20 -20
- data/CHANGELOG.md +398 -11
- data/DEPS_CLI.md +16 -16
- data/DEPS_IDE.md +39 -39
- data/MICROCONTROLLERS.md +103 -0
- data/PERIPHERALS.md +178 -0
- data/README.md +73 -58
- data/Rakefile +1 -1
- data/build +1 -1
- data/denko.gemspec +11 -3
- data/lib/denko/analog_io/ads1100.rb +127 -0
- data/lib/denko/analog_io/ads1115.rb +8 -25
- data/lib/denko/analog_io/ads1118.rb +12 -27
- data/lib/denko/analog_io/ads111x.rb +39 -21
- data/lib/denko/analog_io/input.rb +29 -55
- data/lib/denko/analog_io/input_helper.rb +42 -0
- data/lib/denko/analog_io/joystick.rb +87 -0
- data/lib/denko/analog_io/output.rb +5 -5
- data/lib/denko/analog_io/potentiometer.rb +3 -9
- data/lib/denko/analog_io.rb +22 -7
- data/lib/denko/behaviors/board_proxy.rb +13 -1
- data/lib/denko/behaviors/bus_controller.rb +3 -1
- data/lib/denko/behaviors/bus_controller_addressed.rb +1 -0
- data/lib/denko/behaviors/bus_peripheral.rb +3 -4
- data/lib/denko/behaviors/bus_peripheral_addressed.rb +8 -6
- data/lib/denko/behaviors/callbacks.rb +18 -14
- data/lib/denko/behaviors/component.rb +12 -14
- data/lib/denko/behaviors/input_pin.rb +14 -15
- data/lib/denko/behaviors/lifecycle.rb +51 -0
- data/lib/denko/behaviors/listener.rb +9 -3
- data/lib/denko/behaviors/multi_pin.rb +22 -20
- data/lib/denko/behaviors/output_pin.rb +9 -4
- data/lib/denko/behaviors/poller.rb +11 -2
- data/lib/denko/behaviors/reader.rb +109 -21
- data/lib/denko/behaviors/single_pin.rb +3 -4
- data/lib/denko/behaviors/state.rb +24 -13
- data/lib/denko/behaviors/subcomponents.rb +72 -12
- data/lib/denko/behaviors/threaded.rb +19 -8
- data/lib/denko/behaviors.rb +36 -22
- data/lib/denko/board/core.rb +36 -18
- data/lib/denko/board/eeprom.rb +1 -1
- data/lib/denko/board/i2c.rb +15 -15
- data/lib/denko/board/i2c_bit_bang.rb +53 -0
- data/lib/denko/board/infrared.rb +6 -6
- data/lib/denko/board/led_array.rb +6 -5
- data/lib/denko/board/map.rb +6 -2
- data/lib/denko/board/one_wire.rb +3 -3
- data/lib/denko/board/spi.rb +35 -30
- data/lib/denko/board/spi_bit_bang.rb +14 -15
- data/lib/denko/board.rb +41 -36
- data/lib/denko/connection/binary_echo.rb +17 -0
- data/lib/denko/connection/flow_control.rb +12 -16
- data/lib/denko/connection/handshake.rb +2 -0
- data/lib/denko/connection/serial.rb +5 -5
- data/lib/denko/digital_io/button.rb +4 -0
- data/lib/denko/digital_io/c_bit_bang.rb +15 -0
- data/lib/denko/digital_io/input.rb +4 -5
- data/lib/denko/digital_io/output.rb +19 -10
- data/lib/denko/digital_io/pcf8574.rb +114 -0
- data/lib/denko/digital_io/relay.rb +2 -0
- data/lib/denko/digital_io/rotary_encoder.rb +83 -61
- data/lib/denko/digital_io.rb +24 -5
- data/lib/denko/display/canvas.rb +350 -157
- data/lib/denko/display/font/bmp_5x7.rb +142 -0
- data/lib/denko/display/font/bmp_6x8.rb +142 -0
- data/lib/denko/display/font/bmp_8x16.rb +141 -0
- data/lib/denko/display/font.rb +22 -0
- data/lib/denko/display/hd44780.rb +152 -105
- data/lib/denko/display/il0373.rb +186 -0
- data/lib/denko/display/mono_oled.rb +193 -0
- data/lib/denko/display/pcd8544.rb +154 -0
- data/lib/denko/display/pixel_common.rb +83 -0
- data/lib/denko/display/sh1106.rb +38 -0
- data/lib/denko/display/sh1107.rb +10 -0
- data/lib/denko/display/spi_common.rb +35 -0
- data/lib/denko/display/spi_epaper_common.rb +30 -0
- data/lib/denko/display/ssd1306.rb +6 -168
- data/lib/denko/display/ssd1680.rb +14 -0
- data/lib/denko/display/ssd1681.rb +8 -0
- data/lib/denko/display/ssd168x.rb +227 -0
- data/lib/denko/display/st7302.rb +207 -0
- data/lib/denko/display/st7565.rb +166 -0
- data/lib/denko/display.rb +40 -3
- data/lib/denko/eeprom/at24c.rb +67 -0
- data/lib/denko/eeprom/board.rb +69 -0
- data/lib/denko/eeprom.rb +15 -1
- data/lib/denko/helpers/engine_check.rb +13 -0
- data/lib/denko/helpers/mutex_stub.rb +13 -0
- data/lib/denko/helpers.rb +6 -0
- data/lib/denko/i2c/bit_bang.rb +32 -0
- data/lib/denko/i2c/bus.rb +8 -36
- data/lib/denko/i2c/bus_common.rb +50 -0
- data/lib/denko/i2c/peripheral.rb +32 -19
- data/lib/denko/i2c.rb +17 -2
- data/lib/denko/led/apa102.rb +42 -30
- data/lib/denko/led/base.rb +13 -2
- data/lib/denko/led/rgb.rb +18 -14
- data/lib/denko/led/seven_segment.rb +24 -9
- data/lib/denko/led/ws2812.rb +10 -7
- data/lib/denko/led.rb +17 -8
- data/lib/denko/message.rb +5 -0
- data/lib/denko/motor/{stepper.rb → a3967.rb} +12 -15
- data/lib/denko/motor/l298.rb +11 -10
- data/lib/denko/motor/servo.rb +37 -15
- data/lib/denko/motor.rb +16 -3
- data/lib/denko/one_wire/bus.rb +31 -23
- data/lib/denko/one_wire/bus_enumerator.rb +25 -14
- data/lib/denko/one_wire/helper.rb +4 -2
- data/lib/denko/one_wire/peripheral.rb +0 -3
- data/lib/denko/one_wire.rb +18 -5
- data/lib/denko/pulse_io/buzzer.rb +11 -9
- data/lib/denko/pulse_io/{ir_transmitter.rb → ir_output.rb} +6 -5
- data/lib/denko/pulse_io/pwm_output.rb +94 -15
- data/lib/denko/pulse_io.rb +17 -3
- data/lib/denko/rtc/ds3231.rb +13 -14
- data/lib/denko/rtc.rb +14 -1
- data/lib/denko/sensor/aht.rb +35 -38
- data/lib/denko/sensor/bme280.rb +76 -92
- data/lib/denko/sensor/bmp180.rb +46 -48
- data/lib/denko/sensor/dht.rb +34 -7
- data/lib/denko/sensor/ds18b20.rb +41 -34
- data/lib/denko/sensor/hcsr04.rb +7 -5
- data/lib/denko/sensor/hdc1080.rb +174 -0
- data/lib/denko/sensor/helper.rb +37 -0
- data/lib/denko/sensor/htu21d.rb +57 -57
- data/lib/denko/sensor/htu31d.rb +36 -36
- data/lib/denko/sensor/jsnsr04t.rb +49 -0
- data/lib/denko/sensor/qmp6988.rb +34 -48
- data/lib/denko/sensor/rcwl9620.rb +3 -5
- data/lib/denko/sensor/sht3x.rb +27 -24
- data/lib/denko/sensor/sht4x.rb +125 -0
- data/lib/denko/sensor/vl53l0x.rb +58 -0
- data/lib/denko/sensor.rb +33 -16
- data/lib/denko/spi/base_register.rb +25 -21
- data/lib/denko/spi/bit_bang.rb +17 -51
- data/lib/denko/spi/bus.rb +15 -29
- data/lib/denko/spi/bus_common.rb +33 -0
- data/lib/denko/spi/input_register.rb +37 -31
- data/lib/denko/spi/output_register.rb +33 -39
- data/lib/denko/spi/peripheral.rb +81 -14
- data/lib/denko/spi.rb +21 -6
- data/lib/denko/uart/bit_bang.rb +7 -30
- data/lib/denko/uart/common.rb +33 -0
- data/lib/denko/uart/hardware.rb +10 -34
- data/lib/denko/uart.rb +16 -2
- data/lib/denko/version.rb +1 -1
- data/lib/denko.rb +23 -16
- data/lib/denko_cli/generator.rb +2 -2
- data/lib/denko_cli/packages.rb +8 -10
- data/lib/denko_cli/targets.rb +13 -13
- data/lib/denko_cli/targets.txt +23 -24
- data/lib/denko_cli/usage.txt +1 -1
- data/src/denko_ethernet.ino +0 -14
- data/src/denko_serial.ino +0 -14
- data/src/denko_wifi.ino +6 -15
- data/src/lib/Denko.cpp +65 -16
- data/src/lib/Denko.h +46 -30
- data/src/lib/DenkoCoreIO.cpp +57 -102
- data/src/lib/DenkoDefines.h +32 -46
- data/src/lib/DenkoI2C.cpp +54 -45
- data/src/lib/DenkoI2CBB.cpp +238 -0
- data/src/lib/DenkoIROut.cpp +12 -7
- data/src/lib/DenkoLEDArray.cpp +29 -13
- data/src/lib/DenkoSPI.cpp +36 -33
- data/src/lib/DenkoSPIBB.cpp +19 -20
- data/target.yml +37 -2
- data/test/analog_io/input_test.rb +1 -1
- data/test/analog_io/potentiometer_test.rb +12 -12
- data/test/behaviors/board_proxy_test.rb +1 -1
- data/test/behaviors/bus_peripheral_test.rb +4 -4
- data/test/behaviors/callbacks_test.rb +28 -10
- data/test/behaviors/component_test.rb +32 -14
- data/test/behaviors/input_pin_test.rb +14 -9
- data/test/behaviors/multi_pin_test.rb +14 -4
- data/test/behaviors/output_pin_test.rb +11 -8
- data/test/behaviors/poller_test.rb +1 -0
- data/test/behaviors/reader_test.rb +3 -2
- data/test/behaviors/subcomponents_test.rb +22 -2
- data/test/board/board_test.rb +9 -9
- data/test/board/core_test.rb +15 -11
- data/test/board/i2c_test.rb +39 -33
- data/test/board/infrared_test.rb +1 -1
- data/test/board/message_test.rb +17 -11
- data/test/board/one_wire_test.rb +25 -14
- data/test/board/spi_test.rb +45 -29
- data/test/digital_io/button_test.rb +15 -0
- data/test/digital_io/input_test.rb +2 -2
- data/test/digital_io/relay_test.rb +18 -0
- data/test/digital_io/rotary_encoder_test.rb +80 -60
- data/test/display/canvas_test.rb +306 -0
- data/test/display/hd44780_test.rb +34 -7
- data/test/eeprom/board_test.rb +45 -0
- data/test/helpers/mruby_minitest.rb +95 -0
- data/test/helpers/mruby_runner.rb +13 -0
- data/test/i2c/bus_test.rb +108 -29
- data/test/i2c/peripheral_test.rb +38 -19
- data/test/led/apa102_test.rb +24 -0
- data/test/led/base_test.rb +2 -1
- data/test/led/rgb_test.rb +9 -9
- data/test/led/seven_segment_test.rb +7 -7
- data/test/motor/{stepper_test.rb → a3967_test.rb} +4 -4
- data/test/motor/servo_test.rb +1 -1
- data/test/one_wire/bus_enumerator_test.rb +1 -1
- data/test/one_wire/bus_test.rb +43 -35
- data/test/one_wire/peripheral_test.rb +5 -17
- data/test/pulse_io/buzzer_test.rb +7 -4
- data/test/pulse_io/{ir_transmitter_test.rb → ir_output_test.rb} +15 -10
- data/test/pulse_io/pwm_output_test.rb +74 -18
- data/test/rtc/ds3231_test.rb +13 -14
- data/test/sensor/dht_test.rb +12 -12
- data/test/sensor/ds18b20_test.rb +4 -8
- data/test/spi/bitbang_test.rb +27 -0
- data/test/spi/bus_test.rb +24 -34
- data/test/spi/input_register_test.rb +17 -17
- data/test/spi/output_register_test.rb +10 -28
- data/test/spi/peripheral_test.rb +73 -0
- data/test/test_helper.rb +44 -121
- data/vendor/board-maps/BoardMap.h +678 -54
- data/vendor/board-maps/lib/header_parser.rb +12 -2
- data/vendor/board-maps/yaml/ADAFRUIT_CAMERA_ESP32S3.yml +2 -2
- data/vendor/board-maps/yaml/ADAFRUIT_FEATHER_ESP32C6.yml +15 -0
- data/vendor/board-maps/yaml/ADAFRUIT_FEATHER_ESP32_V2.yml +1 -1
- data/vendor/board-maps/yaml/ADAFRUIT_FEATHER_RP2040_ADALOGGER.yml +44 -0
- data/vendor/board-maps/yaml/ADAFRUIT_QTPY_ESP32C3.yml +1 -0
- data/vendor/board-maps/yaml/ADAFRUIT_QTPY_ESP32S2.yml +1 -0
- data/vendor/board-maps/yaml/ADAFRUIT_QTPY_ESP32S3_N4R2.yml +1 -0
- data/vendor/board-maps/yaml/ADAFRUIT_QTPY_ESP32S3_NOPSRAM.yml +1 -0
- data/vendor/board-maps/yaml/ADAFRUIT_QTPY_ESP32_PICO.yml +1 -0
- data/vendor/board-maps/yaml/ALFREDO_NOU3.yml +2 -0
- data/vendor/board-maps/yaml/AMKEN_BB.yml +48 -0
- data/vendor/board-maps/yaml/AMKEN_ES.yml +48 -0
- data/vendor/board-maps/yaml/AMKEN_REVELOP.yml +48 -0
- data/vendor/board-maps/yaml/AMKEN_REVELOP_PLUS.yml +48 -0
- data/vendor/board-maps/yaml/ASL_CAN_X2.yml +41 -0
- data/vendor/board-maps/yaml/ATD143_S3.yml +1 -0
- data/vendor/board-maps/yaml/BHARATPI_A7672S_4G.yml +14 -0
- data/vendor/board-maps/yaml/BHARATPI_LORA.yml +14 -0
- data/vendor/board-maps/yaml/BHARATPI_NODE_WIFI.yml +14 -0
- data/vendor/board-maps/yaml/BLING.yml +25 -0
- data/vendor/board-maps/yaml/BRIDGETEK_IDM2040_7A.yml +48 -0
- data/vendor/board-maps/yaml/Bee_Motion_Mini.yml +13 -1
- data/vendor/board-maps/yaml/Breadstick_Raspberry.yml +31 -0
- data/vendor/board-maps/yaml/CEZERIO_DEV_ESP32C6.yml +14 -0
- data/vendor/board-maps/yaml/CEZERIO_MINI_DEV_ESP32C6.yml +12 -0
- data/vendor/board-maps/yaml/CIRCUITART_ZERO_S3.yml +71 -0
- data/vendor/board-maps/yaml/CODECELLC3.yml +13 -0
- data/vendor/board-maps/yaml/CYOBOT_V2_ESP32S3.yml +7 -0
- data/vendor/board-maps/yaml/DFROBOT_BEETLE_ESP32C6.yml +8 -0
- data/vendor/board-maps/yaml/DFROBOT_FIREBEETLE_2_ESP32C6.yml +20 -0
- data/vendor/board-maps/yaml/DFROBOT_FIREBEETLE_ESP32.yml +46 -0
- data/vendor/board-maps/yaml/DPTECHNICS_WALTER.yml +39 -0
- data/vendor/board-maps/yaml/EDGES3D.yml +25 -0
- data/vendor/board-maps/yaml/ELECROW_CROWPANEL_7.yml +8 -0
- data/vendor/board-maps/yaml/ESP32C2_DEV.yml +12 -0
- data/vendor/board-maps/yaml/ESP32C3_DEVKIT_LIPO.yml +14 -0
- data/vendor/board-maps/yaml/ESP32C6_DEV.yml +14 -0
- data/vendor/board-maps/yaml/ESP32C6_EVB.yml +15 -0
- data/vendor/board-maps/yaml/ESP32C6_QWIIC_POCKET.yml +15 -0
- data/vendor/board-maps/yaml/ESP32C6_THING_PLUS.yml +14 -0
- data/vendor/board-maps/yaml/ESP32H2_DEV.yml +12 -0
- data/vendor/board-maps/yaml/ESP32H2_DEVKIT_LIPO.yml +12 -0
- data/vendor/board-maps/yaml/ESP32P4_DEV.yml +35 -0
- data/vendor/board-maps/yaml/{RMP.yml → ESP32S2_DEVKIT_LIPO.yml} +1 -1
- data/vendor/board-maps/yaml/ESP32S2_DEVKIT_LIPO_USB.yml +43 -0
- data/vendor/board-maps/yaml/ESP32S3_DEVKIT_LIPO.yml +42 -0
- data/vendor/board-maps/yaml/ESP32S3_POWERFEATHER.yml +22 -0
- data/vendor/board-maps/yaml/ESP32_2432S028R.yml +14 -0
- data/vendor/board-maps/yaml/ESP32_SBC_FABGL.yml +35 -0
- data/vendor/board-maps/yaml/EVN_ALPHA.yml +48 -0
- data/vendor/board-maps/yaml/FEATHERS3.yml +1 -1
- data/vendor/board-maps/yaml/FEATHERS3NEO.yml +32 -0
- data/vendor/board-maps/yaml/FRI3D_2024_ESP32S3.yml +43 -0
- data/vendor/board-maps/yaml/GEEKBLE_ESP32C3.yml +13 -0
- data/vendor/board-maps/yaml/GEEKBLE_NANO_ESP32S3.yml +25 -0
- data/vendor/board-maps/yaml/HELTEC_CAPSULE_SENSOR_V3.yml +43 -0
- data/vendor/board-maps/yaml/HELTEC_VISION_MASTER_E290.yml +41 -0
- data/vendor/board-maps/yaml/HELTEC_VISION_MASTER_E_213.yml +41 -0
- data/vendor/board-maps/yaml/HELTEC_VISION_MASTER_T190.yml +41 -0
- data/vendor/board-maps/yaml/HELTEC_WIFI_LORA_32_V3.yml +42 -0
- data/vendor/board-maps/yaml/HELTEC_WIRELESS_BRIDGE.yml +8 -0
- data/vendor/board-maps/yaml/HELTEC_WIRELESS_MINI_SHELL.yml +13 -0
- data/vendor/board-maps/yaml/HELTEC_WIRELESS_PAPER.yml +42 -0
- data/vendor/board-maps/yaml/HELTEC_WIRELESS_SHELL_V3.yml +42 -0
- data/vendor/board-maps/yaml/HELTEC_WIRELESS_STICK_LITE_V3.yml +30 -0
- data/vendor/board-maps/yaml/HELTEC_WIRELESS_TRACKER.yml +41 -0
- data/vendor/board-maps/yaml/HT_DE01.yml +42 -0
- data/vendor/board-maps/yaml/HUIDU_HD_WF2.yml +5 -0
- data/vendor/board-maps/yaml/HUIDU_HD_WF4.yml +1 -0
- data/vendor/board-maps/yaml/IMBRIOS_LOGSENS_V1P1.yml +1 -1
- data/vendor/board-maps/yaml/LILYGO_LORA_CC1101.yml +6 -0
- data/vendor/board-maps/yaml/LILYGO_LORA_LR1121.yml +6 -0
- data/vendor/board-maps/yaml/LILYGO_LORA_SI4432.yml +6 -0
- data/vendor/board-maps/yaml/LILYGO_LORA_SX1262.yml +6 -0
- data/vendor/board-maps/yaml/LILYGO_LORA_SX1280.yml +6 -0
- data/vendor/board-maps/yaml/LILYGO_T3S3_LR1121.yml +9 -0
- data/vendor/board-maps/yaml/LILYGO_T3S3_SX1262.yml +9 -0
- data/vendor/board-maps/yaml/LILYGO_T3S3_SX1276.yml +9 -0
- data/vendor/board-maps/yaml/LILYGO_T3S3_SX1278.yml +9 -0
- data/vendor/board-maps/yaml/LILYGO_T3S3_SX1280.yml +9 -0
- data/vendor/board-maps/yaml/LILYGO_T3S3_SX1280PA.yml +8 -0
- data/vendor/board-maps/yaml/LILYGO_T_ETH_LITE.yml +21 -0
- data/vendor/board-maps/yaml/LOLIN_C3_MINI.yml +0 -1
- data/vendor/board-maps/yaml/LOLIN_C3_PICO.yml +13 -0
- data/vendor/board-maps/yaml/LOLIN_S3.yml +1 -0
- data/vendor/board-maps/yaml/LOLIN_S3_MINI_PRO.yml +40 -0
- data/vendor/board-maps/yaml/Lion_Bit_Dev_Board.yml +0 -2
- data/vendor/board-maps/yaml/M5STACK_CAPSULE.yml +8 -0
- data/vendor/board-maps/yaml/M5STACK_CARDPUTER.yml +8 -0
- data/vendor/board-maps/yaml/M5STACK_DIAL.yml +8 -0
- data/vendor/board-maps/yaml/M5STACK_DINMETER.yml +8 -0
- data/vendor/board-maps/yaml/M5STACK_FIRE.yml +1 -2
- data/vendor/board-maps/yaml/M5STACK_NANOC6.yml +17 -0
- data/vendor/board-maps/yaml/M5STACK_PAPER.yml +9 -0
- data/vendor/board-maps/yaml/M5STACK_POE_CAM.yml +5 -0
- data/vendor/board-maps/yaml/M5STACK_STAMP_C3.yml +13 -0
- data/vendor/board-maps/yaml/M5STACK_STAMP_S3.yml +4 -0
- data/vendor/board-maps/yaml/{M5Stick_C.yml → M5STACK_STICKC.yml} +0 -1
- data/vendor/board-maps/yaml/M5STACK_STICKC_PLUS.yml +9 -0
- data/vendor/board-maps/yaml/M5STACK_STICKC_PLUS2.yml +9 -0
- data/vendor/board-maps/yaml/M5STACK_TOUGH.yml +9 -0
- data/vendor/board-maps/yaml/M5STACK_UNIT_CAM.yml +10 -0
- data/vendor/board-maps/yaml/M5STACK_UNIT_CAMS3.yml +4 -0
- data/vendor/board-maps/yaml/M5Stack_ATOM.yml +0 -1
- data/vendor/board-maps/yaml/MAKERGO_C3_SUPERMINI.yml +14 -0
- data/vendor/board-maps/yaml/MARBLE_PICO.yml +48 -0
- data/vendor/board-maps/yaml/METEHOCA_AKANA_R1.yml +46 -0
- data/vendor/board-maps/yaml/NAMINO_BIANCO.yml +13 -0
- data/vendor/board-maps/yaml/NEBULAS3.yml +0 -1
- data/vendor/board-maps/yaml/NEWSAN_ARCHI.yml +48 -0
- data/vendor/board-maps/yaml/NOLOGO_ESP32C3_SUPER_MINI.yml +14 -0
- data/vendor/board-maps/yaml/NOLOGO_ESP32S3_PICO.yml +12 -0
- data/vendor/board-maps/yaml/OLIMEX_RP2040_PICO30_16MB.yml +48 -0
- data/vendor/board-maps/yaml/OLIMEX_RP2040_PICO30_2MB.yml +48 -0
- data/vendor/board-maps/yaml/OMGS3.yml +25 -0
- data/vendor/board-maps/yaml/OPTA_ANALOG.yml +7 -0
- data/vendor/board-maps/yaml/OPTA_DIGITAL.yml +5 -0
- data/vendor/board-maps/yaml/PCBCUPID_GLYPHC3.yml +23 -0
- data/vendor/board-maps/yaml/PCBCUPID_GLYPHC6.yml +32 -0
- data/vendor/board-maps/yaml/PCBCUPID_GLYPHH2.yml +24 -0
- data/vendor/board-maps/yaml/PINTRONIX_PINMAX.yml +42 -0
- data/vendor/board-maps/yaml/REDPILL_ESP32S3.yml +0 -1
- data/vendor/board-maps/yaml/SENSEBOX_MCU_ESP32S2.yml +12 -0
- data/vendor/board-maps/yaml/SPARKFUN_ESP32S3_THING_PLUS.yml +13 -0
- data/vendor/board-maps/yaml/SPARKFUN_MICROMOD_RP2040.yml +48 -0
- data/vendor/board-maps/yaml/SPARKFUN_PRO_MICRO_ESP32C3.yml +24 -0
- data/vendor/board-maps/yaml/SPARKLEMOTIONMINI_ESP32.yml +12 -0
- data/vendor/board-maps/yaml/SPARKLEMOTIONSTICK_ESP32.yml +11 -0
- data/vendor/board-maps/yaml/SPARKLEMOTION_ESP32.yml +12 -0
- data/vendor/board-maps/yaml/SQUIXL.yml +7 -0
- data/vendor/board-maps/yaml/THINGPULSE_EPULSE_FEATHER.yml +31 -0
- data/vendor/board-maps/yaml/THINGPULSE_EPULSE_FEATHER_C6.yml +14 -0
- data/vendor/board-maps/yaml/TINYC6.yml +25 -0
- data/vendor/board-maps/yaml/T_LORA_PAGER.yml +6 -0
- data/vendor/board-maps/yaml/T_WATCH_S3.yml +7 -0
- data/vendor/board-maps/yaml/T_WATCH_S3_ULTRA.yml +6 -0
- data/vendor/board-maps/yaml/UPESY_EDU_ESP32.yml +28 -0
- data/vendor/board-maps/yaml/UPESY_ESP32C3_BASIC.yml +13 -0
- data/vendor/board-maps/yaml/UPESY_ESP32C3_MINI.yml +12 -0
- data/vendor/board-maps/yaml/UPESY_ESP32S3_BASIC.yml +42 -0
- data/vendor/board-maps/yaml/VIRALINK_GATE32_01.yml +6 -0
- data/vendor/board-maps/yaml/VIRALINK_GATE32_11.yml +7 -0
- data/vendor/board-maps/yaml/WAVESHARE_ESP32S3_TOUCH_LCD_128.yml +8 -0
- data/vendor/board-maps/yaml/WAVESHARE_ESP32_S3_LCD_146.yml +41 -0
- data/vendor/board-maps/yaml/WAVESHARE_ESP32_S3_LCD_147.yml +41 -0
- data/vendor/board-maps/yaml/WAVESHARE_ESP32_S3_LCD_169.yml +38 -0
- data/vendor/board-maps/yaml/WAVESHARE_ESP32_S3_LCD_185.yml +41 -0
- data/vendor/board-maps/yaml/WAVESHARE_ESP32_S3_RELAY_6CH.yml +41 -0
- data/vendor/board-maps/yaml/WAVESHARE_ESP32_S3_TOUCH_AMOLED_143.yml +7 -0
- data/vendor/board-maps/yaml/WAVESHARE_ESP32_S3_TOUCH_AMOLED_164.yml +7 -0
- data/vendor/board-maps/yaml/WAVESHARE_ESP32_S3_TOUCH_AMOLED_18.yml +38 -0
- data/vendor/board-maps/yaml/WAVESHARE_ESP32_S3_TOUCH_AMOLED_191.yml +7 -0
- data/vendor/board-maps/yaml/WAVESHARE_ESP32_S3_TOUCH_AMOLED_241.yml +7 -0
- data/vendor/board-maps/yaml/WAVESHARE_ESP32_S3_TOUCH_LCD_146.yml +41 -0
- data/vendor/board-maps/yaml/WAVESHARE_ESP32_S3_TOUCH_LCD_169.yml +38 -0
- data/vendor/board-maps/yaml/WAVESHARE_ESP32_S3_TOUCH_LCD_185.yml +41 -0
- data/vendor/board-maps/yaml/WAVESHARE_ESP32_S3_TOUCH_LCD_185_BOX.yml +41 -0
- data/vendor/board-maps/yaml/WAVESHARE_ESP32_S3_TOUCH_LCD_21.yml +41 -0
- data/vendor/board-maps/yaml/WAVESHARE_ESP32_S3_TOUCH_LCD_28.yml +41 -0
- data/vendor/board-maps/yaml/WAVESHARE_ESP32_S3_TOUCH_LCD_4.yml +36 -0
- data/vendor/board-maps/yaml/WAVESHARE_ESP32_S3_TOUCH_LCD_43.yml +38 -0
- data/vendor/board-maps/yaml/WAVESHARE_ESP32_S3_TOUCH_LCD_43B.yml +38 -0
- data/vendor/board-maps/yaml/WAVESHARE_ESP32_S3_TOUCH_LCD_5.yml +38 -0
- data/vendor/board-maps/yaml/WAVESHARE_ESP32_S3_TOUCH_LCD_5B.yml +38 -0
- data/vendor/board-maps/yaml/WAVESHARE_ESP32_S3_TOUCH_LCD_7.yml +38 -0
- data/vendor/board-maps/yaml/WAVESHARE_ESP32_S3_ZERO.yml +36 -0
- data/vendor/board-maps/yaml/WAVESHARE_RP2040_MATRIX.yml +48 -0
- data/vendor/board-maps/yaml/WAVESHARE_RP2040_ONE.yml +1 -0
- data/vendor/board-maps/yaml/WAVESHARE_RP2040_PIZERO.yml +47 -0
- data/vendor/board-maps/yaml/WAVESHARE_RP2040_ZERO.yml +1 -0
- data/vendor/board-maps/yaml/WEACT_STUDIO_ESP32C3.yml +14 -0
- data/vendor/board-maps/yaml/WS_ESP32_S3_MATRIX.yml +38 -0
- data/vendor/board-maps/yaml/WT32_SC01_PLUS.yml +7 -0
- data/vendor/board-maps/yaml/WiFiduinoV2.yml +1 -0
- data/vendor/board-maps/yaml/XIAO_ESP32C3.yml +0 -1
- data/vendor/board-maps/yaml/XIAO_ESP32C6.yml +22 -0
- data/vendor/board-maps/yaml/XIAO_ESP32S3_PLUS.yml +46 -0
- data/vendor/board-maps/yaml/YB_ESP32S3_AMP_V2.yml +28 -0
- data/vendor/board-maps/yaml/YB_ESP32S3_AMP_V3.yml +28 -0
- data/vendor/board-maps/yaml/YB_ESP32S3_ETH.yml +40 -0
- data/vendor/board-maps/yaml/mercury.yml +20 -0
- data/vendor/board-maps/yaml/unphone9.yml +8 -0
- metadata +259 -105
- data/.vscode/settings.json +0 -5
- data/.vscode/tasks.json +0 -20
- data/HARDWARE.md +0 -264
- data/benchmarks/i2c_ssd1306_refresh.rb +0 -84
- data/examples/advanced/m5_env.rb +0 -48
- data/examples/advanced/rotary_encoder_mac_volume.rb +0 -48
- data/examples/advanced/ssd1306_time_temp_rh.rb +0 -48
- data/examples/analog_io/ads1115.rb +0 -57
- data/examples/analog_io/ads1118.rb +0 -73
- data/examples/analog_io/dac_loopback.rb +0 -34
- data/examples/analog_io/input.rb +0 -55
- data/examples/connection/tcp.rb +0 -34
- data/examples/digital_io/button.rb +0 -13
- data/examples/digital_io/rotary_encoder.rb +0 -26
- data/examples/display/hd44780.png +0 -0
- data/examples/display/hd44780.rb +0 -39
- data/examples/display/ssd1306.rb +0 -40
- data/examples/display/ssd1306_s2_pico.rb +0 -29
- data/examples/eeprom/built_in.rb +0 -32
- data/examples/i2c/search.rb +0 -55
- data/examples/led/apa102_bounce.rb +0 -33
- data/examples/led/apa102_breathe.rb +0 -45
- data/examples/led/builtin_blink.rb +0 -12
- data/examples/led/seven_segment_char_echo.rb +0 -15
- data/examples/led/ws2812_bounce.rb +0 -32
- data/examples/led/ws2812_builtin_blink.rb +0 -21
- data/examples/motor/l298.rb +0 -43
- data/examples/motor/servo.rb +0 -16
- data/examples/motor/stepper.png +0 -0
- data/examples/motor/stepper.rb +0 -43
- data/examples/pulse_io/buzzer.rb +0 -30
- data/examples/pulse_io/ir_transmitter.rb +0 -55
- data/examples/rtc/ds3231.rb +0 -48
- data/examples/sensor/aht10.rb +0 -19
- data/examples/sensor/aht20.rb +0 -19
- data/examples/sensor/bme280.rb +0 -38
- data/examples/sensor/bmp180.rb +0 -22
- data/examples/sensor/dht.rb +0 -24
- data/examples/sensor/ds18b20.rb +0 -58
- data/examples/sensor/generic_pir.rb +0 -25
- data/examples/sensor/hcsr04.rb +0 -14
- data/examples/sensor/htu21d.rb +0 -54
- data/examples/sensor/htu31d.rb +0 -35
- data/examples/sensor/neat_tph_readings.rb +0 -26
- data/examples/sensor/qmp6988.rb +0 -53
- data/examples/sensor/rcwl9620.rb +0 -15
- data/examples/sensor/sht3x.rb +0 -34
- data/examples/spi/input_register.rb +0 -50
- data/examples/spi/output_register.rb +0 -49
- data/examples/spi/ssd_through_register.rb +0 -40
- data/examples/spi/two_registers.rb +0 -46
- data/examples/uart/bit_bang_read.rb +0 -16
- data/examples/uart/bit_bang_write.rb +0 -16
- data/examples/uart/board_passthrough.rb +0 -34
- data/examples/uart/hardware_loopback.rb +0 -16
- data/lib/denko/analog_io/sensor.rb +0 -6
- data/lib/denko/eeprom/built_in.rb +0 -69
- data/lib/denko/fonts.rb +0 -106
- data/lib/denko/sensor/virtual.rb +0 -42
- data/src/lib/DenkoIROutESP.cpp +0 -26
- data/test/eeprom/built_in_test.rb +0 -61
- data/tutorial/01-led/led.fzz +0 -0
- data/tutorial/01-led/led.pdf +0 -0
- data/tutorial/01-led/led.rb +0 -73
- data/tutorial/02-button/button.fzz +0 -0
- data/tutorial/02-button/button.pdf +0 -0
- data/tutorial/02-button/button.rb +0 -64
- data/tutorial/03-potentiometer/potentiometer.fzz +0 -0
- data/tutorial/03-potentiometer/potentiometer.pdf +0 -0
- data/tutorial/03-potentiometer/potentiometer.rb +0 -62
- data/tutorial/04-pwm_led/pwm_led.fzz +0 -0
- data/tutorial/04-pwm_led/pwm_led.pdf +0 -0
- data/tutorial/04-pwm_led/pwm_led.rb +0 -66
- data/tutorial/05-rgb_led/rgb_led.fzz +0 -0
- data/tutorial/05-rgb_led/rgb_led.pdf +0 -0
- data/tutorial/05-rgb_led/rgb_led.rb +0 -58
- data/tutorial/05-rgb_led/rgb_mapping.rb +0 -76
- data/vendor/board-maps/yaml/STAMP_S3.yml +0 -8
- /data/vendor/board-maps/yaml/{BRIDGETEK_IDM2040-7A.yml → BRIDGETEK_IDM2040_43A.yml} +0 -0
- /data/vendor/board-maps/yaml/{heltec_wifi_32_lora_V3.yml → HELTEC_WIRELESS_STICK_V3.yml} +0 -0
- /data/vendor/board-maps/yaml/{M5Stack_Core_ESP32.yml → M5STACK_CORE.yml} +0 -0
- /data/vendor/board-maps/yaml/{M5Stamp_Pico.yml → M5STACK_STAMP_PICO.yml} +0 -0
- /data/vendor/board-maps/yaml/{M5Stack-Timer-CAM.yml → M5STACK_TIMER_CAM.yml} +0 -0
@@ -1,34 +0,0 @@
|
|
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
|
-
# Arduino Zero: :DAC0 is :A0 is GPIO14
|
9
|
-
# Arduino UNO R4: :DAC is :A0 is GPIO14
|
10
|
-
# ESP32 V1: :DAC0 is GPIO25, :DAC1 is GPIO26, :A4 is GPIO32
|
11
|
-
# ESP32-S2: :DAC0 is GPIO17, :DAC1 is GPIO18, :A4 is GPIO5
|
12
|
-
#
|
13
|
-
# Connect DAC_PIN TO ADC_PIN with a jumper to test.
|
14
|
-
#
|
15
|
-
DAC_PIN = :DAC0
|
16
|
-
ADC_PIN = :A4
|
17
|
-
|
18
|
-
board = Denko::Board.new(Denko::Connection::Serial.new)
|
19
|
-
dac = Denko::AnalogIO::Output.new(pin: DAC_PIN, board: board)
|
20
|
-
adc = Denko::AnalogIO::Input.new(pin: ADC_PIN, board: board)
|
21
|
-
|
22
|
-
#
|
23
|
-
# Read values should be approximately 4x the written values, since Board#new tries to
|
24
|
-
# set output resolution at 8-bits and input to 10-bits. Not configurable on all chips.
|
25
|
-
# Scale may be off but, readings should still be proportional.
|
26
|
-
#
|
27
|
-
[0, 32, 64, 128, 192, 255].each do |output_value|
|
28
|
-
dac.write output_value
|
29
|
-
sleep 1
|
30
|
-
loopback_value = adc.read
|
31
|
-
puts "ADC reads: #{loopback_value} when DAC writes: #{output_value}"
|
32
|
-
end
|
33
|
-
|
34
|
-
board.finish_write
|
data/examples/analog_io/input.rb
DELETED
@@ -1,55 +0,0 @@
|
|
1
|
-
#
|
2
|
-
# This example shows how to use your board's analog-to-digital-converter(ADC) pins,
|
3
|
-
# through the AnalogIO::Input class. ADC inputs can be connected to sensors
|
4
|
-
# which produce a variable output voltage, such as light dependent resistors,
|
5
|
-
# or a simple temperature sensor like the TMP36.
|
6
|
-
#
|
7
|
-
require 'bundler/setup'
|
8
|
-
require 'denko'
|
9
|
-
|
10
|
-
board = Denko::Board.new(Denko::Connection::Serial.new)
|
11
|
-
input = Denko::AnalogIO::Input.new(pin: :A0, board: board)
|
12
|
-
|
13
|
-
# Single read that blocks the main thread. When a value is received, the given
|
14
|
-
# code block runs only once, and then the main thread continues.
|
15
|
-
input.read { |value| puts "#{Time.now} Single read #1: #{value}" }
|
16
|
-
|
17
|
-
# Read (poll) the input every half second. This happens in a separate thread,
|
18
|
-
# so sleep the main thread for a while to get some values.
|
19
|
-
# Given code block is added as a callback, and runs every time a value is received.
|
20
|
-
input.poll(0.5) { |value| puts "#{Time.now} Polling: #{value}" }
|
21
|
-
sleep 3
|
22
|
-
|
23
|
-
# Stop polling. Automatically removes the #poll callback.
|
24
|
-
input.stop
|
25
|
-
|
26
|
-
# Listening is similar to polling. The board reads the input and sends the value
|
27
|
-
# every time interval, except it's keeping time. We only send the initial command,
|
28
|
-
# not one for each read. Smaller intervals like 32 milliseconds are possible.
|
29
|
-
# Powers of 2 from 1 to 128 are supported for listener intervals.
|
30
|
-
input.listen(32) { |value| puts "#{Time.now} Listening: #{value}" }
|
31
|
-
sleep 0.5
|
32
|
-
|
33
|
-
# Stop listening. Automatically removes the #listen callback.
|
34
|
-
input.stop
|
35
|
-
|
36
|
-
# This adds a persistent callback, which runs no matter how a read happens.
|
37
|
-
# It will not be removed by #stop.
|
38
|
-
input.on_data { |value| puts "#{Time.now} Persistent callback: #{value}" }
|
39
|
-
|
40
|
-
# This is a persistent callback with a custom key.
|
41
|
-
input.on_data(:test) { |value| puts "#{Time.now} Keyed callback: #{value}"}
|
42
|
-
|
43
|
-
# If we do a single read, the two persistent callbacks, and the block given, should run once each.
|
44
|
-
input.read { |value| puts "#{Time.now} Single read #2: #{value}" }
|
45
|
-
|
46
|
-
# If we listen, the two persistent callbacks, and the block given should run many times.
|
47
|
-
input.listen(8) { |value| puts "#{Time.now } Listening again: #{value}" }
|
48
|
-
sleep 0.125
|
49
|
-
input.stop
|
50
|
-
|
51
|
-
# Remove callbacks keyed with :test.
|
52
|
-
input.remove_callbacks(:test)
|
53
|
-
|
54
|
-
# Remove all callbacks.
|
55
|
-
input.remove_callbacks
|
data/examples/connection/tcp.rb
DELETED
@@ -1,34 +0,0 @@
|
|
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(board: board, pin: :LED_BUILTIN)
|
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
|
-
#
|
@@ -1,13 +0,0 @@
|
|
1
|
-
#
|
2
|
-
# Simple button example.
|
3
|
-
#
|
4
|
-
require 'bundler/setup'
|
5
|
-
require 'denko'
|
6
|
-
|
7
|
-
board = Denko::Board.new(Denko::Connection::Serial.new)
|
8
|
-
button = Denko::DigitalIO::Button.new(board: board, pin: 5, pullup: true)
|
9
|
-
|
10
|
-
button.up { puts "Button released!" }
|
11
|
-
button.down { puts "Button pressed!" }
|
12
|
-
|
13
|
-
sleep
|
@@ -1,26 +0,0 @@
|
|
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
|
data/examples/display/hd44780.rb
DELETED
@@ -1,39 +0,0 @@
|
|
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
|
data/examples/display/ssd1306.rb
DELETED
@@ -1,40 +0,0 @@
|
|
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: :SDA)
|
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
|
@@ -1,29 +0,0 @@
|
|
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
|
data/examples/eeprom/built_in.rb
DELETED
@@ -1,32 +0,0 @@
|
|
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
|
data/examples/i2c/search.rb
DELETED
@@ -1,55 +0,0 @@
|
|
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
|
-
puts "Detected board: #{board.name}"
|
27
|
-
|
28
|
-
sda = board.map[:SDA] || board.map[:SDA0]
|
29
|
-
scl = board.map[:SCL] || board.map[:SCL0]
|
30
|
-
|
31
|
-
# If not in map, ask user to set manually.
|
32
|
-
unless sda && scl
|
33
|
-
puts "Error: I2C pins not found in this board's pin map"
|
34
|
-
sda, scl = enter_pins
|
35
|
-
end
|
36
|
-
end
|
37
|
-
|
38
|
-
puts "Using I2C interface on pins #{sda} (SDA) and #{scl} (SCL)"
|
39
|
-
puts
|
40
|
-
|
41
|
-
bus = Denko::I2C::Bus.new(board: board, pin: sda)
|
42
|
-
bus.search
|
43
|
-
|
44
|
-
if bus.found_devices.empty?
|
45
|
-
puts "No devices found on I2C bus"
|
46
|
-
else
|
47
|
-
puts "I2C device addresses found:"
|
48
|
-
bus.found_devices.each do |address|
|
49
|
-
# Print as hexadecimal.
|
50
|
-
puts "0x#{address.to_s(16).upcase}"
|
51
|
-
end
|
52
|
-
end
|
53
|
-
|
54
|
-
puts
|
55
|
-
board.finish_write
|
@@ -1,33 +0,0 @@
|
|
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
|
@@ -1,45 +0,0 @@
|
|
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
|
@@ -1,12 +0,0 @@
|
|
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
|
@@ -1,15 +0,0 @@
|
|
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) }
|
@@ -1,32 +0,0 @@
|
|
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
|
@@ -1,21 +0,0 @@
|
|
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
|
data/examples/motor/l298.rb
DELETED
@@ -1,43 +0,0 @@
|
|
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
|
data/examples/motor/servo.rb
DELETED
@@ -1,16 +0,0 @@
|
|
1
|
-
#
|
2
|
-
# This is an example of how to use the servo class
|
3
|
-
#
|
4
|
-
require 'bundler/setup'
|
5
|
-
require 'denko'
|
6
|
-
|
7
|
-
board = Denko::Board.new(Denko::Connection::Serial.new)
|
8
|
-
servo = Denko::Motor::Servo.new(pin: 9, board: board)
|
9
|
-
|
10
|
-
# Add different angles (in degrees) to the array below to try out your servo.
|
11
|
-
# Note: Some servos may not have a full 180 degree sweep.
|
12
|
-
|
13
|
-
[0, 90].cycle do |angle|
|
14
|
-
servo.position = angle
|
15
|
-
sleep 0.5
|
16
|
-
end
|
data/examples/motor/stepper.png
DELETED
Binary file
|
data/examples/motor/stepper.rb
DELETED
@@ -1,43 +0,0 @@
|
|
1
|
-
#
|
2
|
-
# Example driving a stepper motor with the EasyDriver board: https://www.sparkfun.com/products/10267?
|
3
|
-
#
|
4
|
-
require 'bundler/setup'
|
5
|
-
require 'denko'
|
6
|
-
|
7
|
-
board = Denko::Board.new(Denko::Connection::Serial.new)
|
8
|
-
stepper = Denko::Motor::Stepper.new board: board,
|
9
|
-
pins: { slp: 6, enable: 7, direction: 8, step: 10, ms1: 11, ms2: 12 }
|
10
|
-
|
11
|
-
# Default is 8 microsteps. Set to 2 so we can move faster.
|
12
|
-
stepper.microsteps = 2
|
13
|
-
|
14
|
-
# 400 steps is now 1 revolution for a 200 step motor.
|
15
|
-
400.times do
|
16
|
-
stepper.step_cc
|
17
|
-
sleep 0.002
|
18
|
-
end
|
19
|
-
|
20
|
-
# Sleep the driver chip and wait a while.
|
21
|
-
stepper.sleep
|
22
|
-
sleep 1
|
23
|
-
|
24
|
-
# Wake it up and set to full steps.
|
25
|
-
stepper.wake
|
26
|
-
stepper.microsteps = 1
|
27
|
-
|
28
|
-
#
|
29
|
-
# Now 200 steps the other way will move us back to the start.
|
30
|
-
# Note the longer sleep here since the steps are bigger.
|
31
|
-
# Adjust both sleep vales to suit your motor.
|
32
|
-
#
|
33
|
-
200.times do
|
34
|
-
stepper.step_cw
|
35
|
-
sleep 0.006
|
36
|
-
end
|
37
|
-
|
38
|
-
# Sleep the driver once we're done.
|
39
|
-
stepper.sleep
|
40
|
-
|
41
|
-
# We write to the board asynchronously.
|
42
|
-
# Make sure we send all step commands before exit.
|
43
|
-
board.finish_write
|
data/examples/pulse_io/buzzer.rb
DELETED
@@ -1,30 +0,0 @@
|
|
1
|
-
#
|
2
|
-
# Example of playing a melody on a piezoelectric buzzer.
|
3
|
-
#
|
4
|
-
require 'bundler/setup'
|
5
|
-
require 'denko'
|
6
|
-
|
7
|
-
board = Denko::Board.new(Denko::Connection::Serial.new)
|
8
|
-
buzzer = Denko::PulseIO::Buzzer.new(board: board, pin: 9)
|
9
|
-
|
10
|
-
C4 = 262
|
11
|
-
D4 = 294
|
12
|
-
E4 = 330
|
13
|
-
|
14
|
-
notes = [
|
15
|
-
[E4, 1], [D4, 1], [C4, 1], [D4, 1], [E4, 1], [E4, 1], [E4, 2],
|
16
|
-
[D4, 1], [D4, 1], [D4, 2], [E4, 1], [E4, 1], [E4, 2],
|
17
|
-
[E4, 1], [D4, 1], [C4, 1], [D4, 1], [E4, 1], [E4, 1], [E4, 1], [E4, 1],
|
18
|
-
[D4, 1], [D4, 1], [E4, 1], [D4, 1], [C4, 4],
|
19
|
-
]
|
20
|
-
|
21
|
-
bpm = 240
|
22
|
-
beat_time = 60.to_f / bpm
|
23
|
-
|
24
|
-
notes.each do |note|
|
25
|
-
buzzer.tone(note[0])
|
26
|
-
sleep note[1] * beat_time
|
27
|
-
end
|
28
|
-
|
29
|
-
buzzer.stop
|
30
|
-
board.finish_write
|