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,40 +0,0 @@
|
|
1
|
-
#
|
2
|
-
# Example of SevenSegment LED driven though an output shift register (74HC595).
|
3
|
-
# Can be used on either a bit bang or hardware SPI interface.
|
4
|
-
#
|
5
|
-
require 'bundler/setup'
|
6
|
-
require 'denko'
|
7
|
-
|
8
|
-
# SPI pins (on board)
|
9
|
-
SPI_BIT_BANG_PINS = { clock: 13, output: 11 }
|
10
|
-
REGISTER_SELECT_PIN = 10
|
11
|
-
|
12
|
-
# SevenSegment pins (on register parallel outputs)
|
13
|
-
SEVEN_SEGMENT_PINS = { cathode: 0, a: 1, b: 2, c: 3, d: 4, e: 5, f: 6, g: 7 }
|
14
|
-
|
15
|
-
board = Denko::Board.new(Denko::Connection::Serial.new)
|
16
|
-
|
17
|
-
# 1-way bit bang SPI bus (slower, but use any pins).
|
18
|
-
bus = Denko::SPI::BitBang.new(board: board, pins: SPI_BIT_BANG_PINS)
|
19
|
-
|
20
|
-
# Use the default hardware SPI bus (faster, but predetermined pins).
|
21
|
-
# bus = Denko::SPI::Bus.new(board: board)
|
22
|
-
|
23
|
-
# Show the hardware SPI pins to aid connection.
|
24
|
-
# MOSI = output | MISO = input | SCK = clock
|
25
|
-
# puts board.map.select { |name, number| [:MOSI, :MISO, :SCK].include?(name) }
|
26
|
-
|
27
|
-
# OutputRegister needs a bus and its select pin.
|
28
|
-
register = Denko::SPI::OutputRegister.new(bus: bus, pin: REGISTER_SELECT_PIN)
|
29
|
-
|
30
|
-
#
|
31
|
-
# OutputRegister implements enough of the Board interface that digital output
|
32
|
-
# components can treat it as a Board. Do that with the SSD.
|
33
|
-
#
|
34
|
-
ssd = Denko::LED::SevenSegment.new(board: register, pins: SEVEN_SEGMENT_PINS)
|
35
|
-
|
36
|
-
# Turn off the ssd on exit.
|
37
|
-
trap("SIGINT") { exit !ssd.off }
|
38
|
-
|
39
|
-
# Type a character and press Enter to show it on the SevenSegment LED.
|
40
|
-
loop { ssd.display(gets.chomp) }
|
@@ -1,46 +0,0 @@
|
|
1
|
-
#
|
2
|
-
# Example of 2 SPI devices on the same bus with different select pins.
|
3
|
-
# Combination of input_register.rb and output_register.rb
|
4
|
-
#
|
5
|
-
require 'bundler/setup'
|
6
|
-
require 'denko'
|
7
|
-
|
8
|
-
# SPI pins (on board)
|
9
|
-
SPI_BIT_BANG_PINS = { clock: 13, input: 12, output: 11 }
|
10
|
-
OUT_REGISTER_SELECT = 10
|
11
|
-
IN_REGISTER_SELECT = 9
|
12
|
-
|
13
|
-
# LED and Button pins (on their respective registers' parallel pins)
|
14
|
-
LED_PIN = 0
|
15
|
-
BUTTON_PIN = 0
|
16
|
-
|
17
|
-
board = Denko::Board.new(Denko::Connection::Serial.new)
|
18
|
-
|
19
|
-
# 2-way bit bang SPI bus (slower, but use any pins).
|
20
|
-
bus = Denko::SPI::BitBang.new(board: board, pins: SPI_BIT_BANG_PINS)
|
21
|
-
|
22
|
-
# Use the default hardware SPI bus (faster, but predetermined pins).
|
23
|
-
# bus = Denko::SPI::Bus.new(board: board)
|
24
|
-
|
25
|
-
# Show the hardware SPI pins to aid connection.
|
26
|
-
# MOSI = output | MISO = input | SCK = clock
|
27
|
-
# puts board.map.select { |name, number| [:MOSI, :MISO, :SCK].include?(name) }
|
28
|
-
|
29
|
-
# OutputRegister needs a bus and its select pin.
|
30
|
-
out_register = Denko::SPI::OutputRegister.new(bus: bus, pin: OUT_REGISTER_SELECT)
|
31
|
-
|
32
|
-
# InputRegister needs a bus and its select pin. The CD4021 likes SPI mode 2.
|
33
|
-
in_register = Denko::SPI::InputRegister.new(bus: bus, pin: IN_REGISTER_SELECT, spi_mode: 2)
|
34
|
-
|
35
|
-
# LED connected to the output register.
|
36
|
-
led = Denko::LED.new(board: out_register, pin: LED_PIN)
|
37
|
-
|
38
|
-
# Button connected to the input register.
|
39
|
-
button = Denko::DigitalIO::Button.new(board: in_register, pin: BUTTON_PIN)
|
40
|
-
|
41
|
-
# Button callbacks.
|
42
|
-
button.down { led.on; puts "Button pressed" }
|
43
|
-
button.up { led.off; puts "Button released" }
|
44
|
-
|
45
|
-
# Sleep the main thread. Press the button and callbacks will run.
|
46
|
-
sleep
|
@@ -1,16 +0,0 @@
|
|
1
|
-
#
|
2
|
-
# Example that writes to hardware UART1 and reads back on bit bang UART. Tested on Arduino Mega.
|
3
|
-
#
|
4
|
-
require 'bundler/setup'
|
5
|
-
require 'denko'
|
6
|
-
|
7
|
-
board = Denko::Board.new(Denko::Connection::Serial.new)
|
8
|
-
|
9
|
-
hw_uart = Denko::UART::Hardware.new(board: board, index: 1, baud: 31250)
|
10
|
-
bb_uart = Denko::UART::BitBang.new(board: board, pins: { rx:10, tx:11 }, baud: 31250)
|
11
|
-
|
12
|
-
hw_uart.write("Hello World!\n")
|
13
|
-
|
14
|
-
sleep 1
|
15
|
-
|
16
|
-
puts bb_uart.gets
|
@@ -1,16 +0,0 @@
|
|
1
|
-
#
|
2
|
-
# Example that writes to bit bang UART and reads back on hardware UART1. Tested on Arduino Mega.
|
3
|
-
#
|
4
|
-
require 'bundler/setup'
|
5
|
-
require 'denko'
|
6
|
-
|
7
|
-
board = Denko::Board.new(Denko::Connection::Serial.new)
|
8
|
-
|
9
|
-
hw_uart = Denko::UART::Hardware.new(board: board, index: 1, baud: 31250)
|
10
|
-
bb_uart = Denko::UART::BitBang.new(board: board, pins: { rx:10, tx:11 }, baud: 31250)
|
11
|
-
|
12
|
-
bb_uart.write("Hello World!\n")
|
13
|
-
|
14
|
-
sleep 1
|
15
|
-
|
16
|
-
puts hw_uart.gets
|
@@ -1,34 +0,0 @@
|
|
1
|
-
#
|
2
|
-
# Example using one board's UART as the transport for a second board, also running Denko.
|
3
|
-
#
|
4
|
-
# For this example, board1 (direct) is an Arduino Mega. board2 (passthrough) is an Uno,
|
5
|
-
# running Denko, with its UART pins (0, 1) connected to the Mega's UART1 pins (18, 19)
|
6
|
-
#
|
7
|
-
# This isn't 100% reliable. The Rx buffer on the direct board is periodically read, so
|
8
|
-
# it can potentially overflow, causing data sent from the passthrough board to be lost.
|
9
|
-
# Eventually flow control data will be lost and the host will stop sending altogether.
|
10
|
-
#
|
11
|
-
# Use at your own risk, but for the best possible performance:
|
12
|
-
# 1) Avoid long running commands on the direct board (eg. IR transmission, HTU21D).
|
13
|
-
# These block the CPU enough that the Rx buffer won't be read in time to avoid overflow.
|
14
|
-
# 2) Use the lowest practical baud rate on the passthrough board. 19200 is used here, so
|
15
|
-
# the direct board's Rx buffer takes 6x the time to fill, compared to 115200 baud.
|
16
|
-
#
|
17
|
-
require 'bundler/setup'
|
18
|
-
require 'denko'
|
19
|
-
|
20
|
-
board1 = Denko::Board.new(Denko::Connection::Serial.new)
|
21
|
-
|
22
|
-
uart = Denko::UART::Hardware.new(board: board1, index: 1)
|
23
|
-
board2 = Denko::Board.new(Denko::Connection::BoardUART.new(uart, baud: 19200))
|
24
|
-
|
25
|
-
led1 = Denko::LED.new(board: board1, pin: 13)
|
26
|
-
led1.blink(0.02)
|
27
|
-
|
28
|
-
led2 = Denko::LED.new(board: board2, pin: 13)
|
29
|
-
led2.blink(0.02)
|
30
|
-
|
31
|
-
sensor = Denko::AnalogIO::Input.new(board: board1, pin: :A0)
|
32
|
-
sensor.listen(4)
|
33
|
-
|
34
|
-
sleep
|
@@ -1,16 +0,0 @@
|
|
1
|
-
#
|
2
|
-
# Example that writes to TX pin of hardware UART1 and reads back on RX pin of same UART.
|
3
|
-
#
|
4
|
-
require 'bundler/setup'
|
5
|
-
require 'denko'
|
6
|
-
|
7
|
-
board = Denko::Board.new(Denko::Connection::Serial.new)
|
8
|
-
|
9
|
-
uart = Denko::UART::Hardware.new(board: board, index: 1, baud: 31250)
|
10
|
-
|
11
|
-
uart.write("Hello World!\nBye World!\n")
|
12
|
-
|
13
|
-
sleep 1
|
14
|
-
|
15
|
-
puts uart.gets
|
16
|
-
puts uart.gets
|
@@ -1,69 +0,0 @@
|
|
1
|
-
module Denko
|
2
|
-
module EEPROM
|
3
|
-
class BuiltIn
|
4
|
-
include Behaviors::Component
|
5
|
-
include Behaviors::Reader
|
6
|
-
|
7
|
-
public :state=
|
8
|
-
|
9
|
-
def pin
|
10
|
-
254
|
11
|
-
end
|
12
|
-
|
13
|
-
def after_initialize(options={})
|
14
|
-
super(options)
|
15
|
-
self.state = Array.new(board.eeprom_length, nil)
|
16
|
-
load
|
17
|
-
end
|
18
|
-
|
19
|
-
def load
|
20
|
-
state.each_slice(128).with_index do |slice, index|
|
21
|
-
read_using -> { board.eeprom_read(index * 128, slice.length) }
|
22
|
-
end
|
23
|
-
end
|
24
|
-
|
25
|
-
def save
|
26
|
-
@state_mutex.synchronize do
|
27
|
-
@state.each_slice(128).with_index do |slice, index|
|
28
|
-
board.eeprom_write(index * 128, slice)
|
29
|
-
end
|
30
|
-
end
|
31
|
-
load
|
32
|
-
end
|
33
|
-
|
34
|
-
#
|
35
|
-
# Specific Array-like methods for convenience.
|
36
|
-
#
|
37
|
-
def length; board.eeprom_length; end
|
38
|
-
alias :count :length
|
39
|
-
|
40
|
-
def [](index)
|
41
|
-
@state_mutex.synchronize { @state.send :[], index }
|
42
|
-
end
|
43
|
-
|
44
|
-
def []=(index, value)
|
45
|
-
@state_mutex.synchronize { @state.send :[]=, index, value }
|
46
|
-
end
|
47
|
-
|
48
|
-
def each(&block)
|
49
|
-
@state_mutex.synchronize { @state.send :each, &block }
|
50
|
-
end
|
51
|
-
|
52
|
-
def each_with_index(&block)
|
53
|
-
@state_mutex.synchronize { @state.send :each_with_index, &block }
|
54
|
-
end
|
55
|
-
|
56
|
-
def pre_callback_filter(message)
|
57
|
-
address = message.split("-", 2)[0].to_i
|
58
|
-
bytes = message.split("-", 2)[1].split(",").map(&:to_i)
|
59
|
-
{address: address, data: bytes}
|
60
|
-
end
|
61
|
-
|
62
|
-
def update_state(hash)
|
63
|
-
@state_mutex.synchronize do
|
64
|
-
@state[hash[:address], hash[:data].length] = hash[:data]
|
65
|
-
end
|
66
|
-
end
|
67
|
-
end
|
68
|
-
end
|
69
|
-
end
|
data/lib/denko/fonts.rb
DELETED
@@ -1,106 +0,0 @@
|
|
1
|
-
module Denko
|
2
|
-
module Fonts
|
3
|
-
#
|
4
|
-
# Adapted from:
|
5
|
-
# https://github.com/lexus2k/ssd1306/blob/master/src/ssd1306_fonts.c
|
6
|
-
#
|
7
|
-
FONT_6x8 = [
|
8
|
-
[0x00, 0x00, 0x00, 0x00, 0x00, 0x00], # sp
|
9
|
-
[0x00, 0x00, 0x00, 0x2f, 0x00, 0x00], # !
|
10
|
-
[0x00, 0x00, 0x07, 0x00, 0x07, 0x00], # "
|
11
|
-
[0x00, 0x14, 0x7f, 0x14, 0x7f, 0x14], # #
|
12
|
-
[0x00, 0x24, 0x2a, 0x7f, 0x2a, 0x12], # $
|
13
|
-
[0x00, 0x23, 0x13, 0x08, 0x64, 0x62], # %
|
14
|
-
[0x00, 0x36, 0x49, 0x55, 0x22, 0x50], # &
|
15
|
-
[0x00, 0x00, 0x05, 0x03, 0x00, 0x00], # '
|
16
|
-
[0x00, 0x00, 0x1c, 0x22, 0x41, 0x00], # (
|
17
|
-
[0x00, 0x00, 0x41, 0x22, 0x1c, 0x00], # )
|
18
|
-
[0x00, 0x14, 0x08, 0x3E, 0x08, 0x14], # *
|
19
|
-
[0x00, 0x08, 0x08, 0x3E, 0x08, 0x08], # +
|
20
|
-
[0x00, 0x00, 0x00, 0xA0, 0x60, 0x00], # ,
|
21
|
-
[0x00, 0x08, 0x08, 0x08, 0x08, 0x08], # -
|
22
|
-
[0x00, 0x00, 0x60, 0x60, 0x00, 0x00], # .
|
23
|
-
[0x00, 0x20, 0x10, 0x08, 0x04, 0x02], # /
|
24
|
-
[0x00, 0x3E, 0x51, 0x49, 0x45, 0x3E], # 0
|
25
|
-
[0x00, 0x00, 0x42, 0x7F, 0x40, 0x00], # 1
|
26
|
-
[0x00, 0x42, 0x61, 0x51, 0x49, 0x46], # 2
|
27
|
-
[0x00, 0x21, 0x41, 0x45, 0x4B, 0x31], # 3
|
28
|
-
[0x00, 0x18, 0x14, 0x12, 0x7F, 0x10], # 4
|
29
|
-
[0x00, 0x27, 0x45, 0x45, 0x45, 0x39], # 5
|
30
|
-
[0x00, 0x3C, 0x4A, 0x49, 0x49, 0x30], # 6
|
31
|
-
[0x00, 0x01, 0x71, 0x09, 0x05, 0x03], # 7
|
32
|
-
[0x00, 0x36, 0x49, 0x49, 0x49, 0x36], # 8
|
33
|
-
[0x00, 0x06, 0x49, 0x49, 0x29, 0x1E], # 9
|
34
|
-
[0x00, 0x00, 0x36, 0x36, 0x00, 0x00], # :
|
35
|
-
[0x00, 0x00, 0x56, 0x36, 0x00, 0x00], # ;
|
36
|
-
[0x00, 0x08, 0x14, 0x22, 0x41, 0x00], # <
|
37
|
-
[0x00, 0x14, 0x14, 0x14, 0x14, 0x14], # =
|
38
|
-
[0x00, 0x00, 0x41, 0x22, 0x14, 0x08], # >
|
39
|
-
[0x00, 0x02, 0x01, 0x51, 0x09, 0x06], # ?
|
40
|
-
[0x00, 0x32, 0x49, 0x59, 0x51, 0x3E], # @
|
41
|
-
[0x00, 0x7C, 0x12, 0x11, 0x12, 0x7C], # A
|
42
|
-
[0x00, 0x7F, 0x49, 0x49, 0x49, 0x36], # B
|
43
|
-
[0x00, 0x3E, 0x41, 0x41, 0x41, 0x22], # C
|
44
|
-
[0x00, 0x7F, 0x41, 0x41, 0x22, 0x1C], # D
|
45
|
-
[0x00, 0x7F, 0x49, 0x49, 0x49, 0x41], # E
|
46
|
-
[0x00, 0x7F, 0x09, 0x09, 0x09, 0x01], # F
|
47
|
-
[0x00, 0x3E, 0x41, 0x49, 0x49, 0x7A], # G
|
48
|
-
[0x00, 0x7F, 0x08, 0x08, 0x08, 0x7F], # H
|
49
|
-
[0x00, 0x00, 0x41, 0x7F, 0x41, 0x00], # I
|
50
|
-
[0x00, 0x20, 0x40, 0x41, 0x3F, 0x01], # J
|
51
|
-
[0x00, 0x7F, 0x08, 0x14, 0x22, 0x41], # K
|
52
|
-
[0x00, 0x7F, 0x40, 0x40, 0x40, 0x40], # L
|
53
|
-
[0x00, 0x7F, 0x02, 0x0C, 0x02, 0x7F], # M
|
54
|
-
[0x00, 0x7F, 0x04, 0x08, 0x10, 0x7F], # N
|
55
|
-
[0x00, 0x3E, 0x41, 0x41, 0x41, 0x3E], # O
|
56
|
-
[0x00, 0x7F, 0x09, 0x09, 0x09, 0x06], # P
|
57
|
-
[0x00, 0x3E, 0x41, 0x51, 0x21, 0x5E], # Q
|
58
|
-
[0x00, 0x7F, 0x09, 0x19, 0x29, 0x46], # R
|
59
|
-
[0x00, 0x46, 0x49, 0x49, 0x49, 0x31], # S
|
60
|
-
[0x00, 0x01, 0x01, 0x7F, 0x01, 0x01], # T
|
61
|
-
[0x00, 0x3F, 0x40, 0x40, 0x40, 0x3F], # U
|
62
|
-
[0x00, 0x1F, 0x20, 0x40, 0x20, 0x1F], # V
|
63
|
-
[0x00, 0x3F, 0x40, 0x38, 0x40, 0x3F], # W
|
64
|
-
[0x00, 0x63, 0x14, 0x08, 0x14, 0x63], # X
|
65
|
-
[0x00, 0x07, 0x08, 0x70, 0x08, 0x07], # Y
|
66
|
-
[0x00, 0x61, 0x51, 0x49, 0x45, 0x43], # Z
|
67
|
-
[0x00, 0x00, 0x7F, 0x41, 0x41, 0x00], # [
|
68
|
-
[0x00, 0x02, 0x04, 0x08, 0x10, 0x20], # \
|
69
|
-
[0x00, 0x00, 0x41, 0x41, 0x7F, 0x00], # ]
|
70
|
-
[0x00, 0x04, 0x02, 0x01, 0x02, 0x04], # ^
|
71
|
-
[0x00, 0x40, 0x40, 0x40, 0x40, 0x40], # _
|
72
|
-
[0x00, 0x00, 0x01, 0x02, 0x04, 0x00], # '
|
73
|
-
[0x00, 0x20, 0x54, 0x54, 0x54, 0x78], # a
|
74
|
-
[0x00, 0x7F, 0x48, 0x44, 0x44, 0x38], # b
|
75
|
-
[0x00, 0x38, 0x44, 0x44, 0x44, 0x20], # c
|
76
|
-
[0x00, 0x38, 0x44, 0x44, 0x48, 0x7F], # d
|
77
|
-
[0x00, 0x38, 0x54, 0x54, 0x54, 0x18], # e
|
78
|
-
[0x00, 0x08, 0x7E, 0x09, 0x01, 0x02], # f
|
79
|
-
[0x00, 0x18, 0xA4, 0xA4, 0xA4, 0x7C], # g
|
80
|
-
[0x00, 0x7F, 0x08, 0x04, 0x04, 0x78], # h
|
81
|
-
[0x00, 0x00, 0x44, 0x7D, 0x40, 0x00], # i
|
82
|
-
[0x00, 0x40, 0x80, 0x84, 0x7D, 0x00], # j
|
83
|
-
[0x00, 0x7F, 0x10, 0x28, 0x44, 0x00], # k
|
84
|
-
[0x00, 0x00, 0x41, 0x7F, 0x40, 0x00], # l
|
85
|
-
[0x00, 0x7C, 0x04, 0x18, 0x04, 0x78], # m
|
86
|
-
[0x00, 0x7C, 0x08, 0x04, 0x04, 0x78], # n
|
87
|
-
[0x00, 0x38, 0x44, 0x44, 0x44, 0x38], # o
|
88
|
-
[0x00, 0xFC, 0x24, 0x24, 0x24, 0x18], # p
|
89
|
-
[0x00, 0x18, 0x24, 0x24, 0x18, 0xFC], # q
|
90
|
-
[0x00, 0x7C, 0x08, 0x04, 0x04, 0x08], # r
|
91
|
-
[0x00, 0x48, 0x54, 0x54, 0x54, 0x20], # s
|
92
|
-
[0x00, 0x04, 0x3F, 0x44, 0x40, 0x20], # t
|
93
|
-
[0x00, 0x3C, 0x40, 0x40, 0x20, 0x7C], # u
|
94
|
-
[0x00, 0x1C, 0x20, 0x40, 0x20, 0x1C], # v
|
95
|
-
[0x00, 0x3C, 0x40, 0x30, 0x40, 0x3C], # w
|
96
|
-
[0x00, 0x44, 0x28, 0x10, 0x28, 0x44], # x
|
97
|
-
[0x00, 0x1C, 0xA0, 0xA0, 0xA0, 0x7C], # y
|
98
|
-
[0x00, 0x44, 0x64, 0x54, 0x4C, 0x44], # z
|
99
|
-
[0x00, 0x00, 0x08, 0x77, 0x00, 0x00], # {
|
100
|
-
[0x00, 0x00, 0x00, 0x7F, 0x00, 0x00], # |
|
101
|
-
[0x00, 0x00, 0x77, 0x08, 0x00, 0x00], # }
|
102
|
-
[0x00, 0x10, 0x08, 0x10, 0x08, 0x00], # ~
|
103
|
-
[0x14, 0x14, 0x14, 0x14, 0x14, 0x14], # horiz lines # DEL
|
104
|
-
]
|
105
|
-
end
|
106
|
-
end
|
data/lib/denko/sensor/virtual.rb
DELETED
@@ -1,42 +0,0 @@
|
|
1
|
-
module Denko
|
2
|
-
module Sensor
|
3
|
-
class Temperature
|
4
|
-
include Behaviors::Poller
|
5
|
-
|
6
|
-
def initialize(sensor)
|
7
|
-
@sensor = sensor
|
8
|
-
super
|
9
|
-
end
|
10
|
-
|
11
|
-
def _read
|
12
|
-
@sensor.read_temperature
|
13
|
-
end
|
14
|
-
|
15
|
-
alias :celsius :state
|
16
|
-
alias :to_i :state
|
17
|
-
|
18
|
-
def fahrenheit
|
19
|
-
(celsius * 9 / 5) + 32
|
20
|
-
end
|
21
|
-
|
22
|
-
def kelvin
|
23
|
-
celsius + 273.15
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
27
|
-
class Humidity
|
28
|
-
include Behaviors::Poller
|
29
|
-
|
30
|
-
def initialize(sensor)
|
31
|
-
@sensor = sensor
|
32
|
-
super
|
33
|
-
end
|
34
|
-
|
35
|
-
def _read
|
36
|
-
@sensor.read_humidity
|
37
|
-
end
|
38
|
-
|
39
|
-
alias :to_i :state
|
40
|
-
end
|
41
|
-
end
|
42
|
-
end
|
data/src/lib/DenkoIROutESP.cpp
DELETED
@@ -1,26 +0,0 @@
|
|
1
|
-
//
|
2
|
-
// Denko IR output for the ESP8266 and ESP32.
|
3
|
-
// Depends on: https://github.com/crankyoldgit/IRremoteESP8266
|
4
|
-
// DENKO_IR_OUT must be defeind in DenkoDefines.h
|
5
|
-
//
|
6
|
-
#include "Denko.h"
|
7
|
-
#if defined(DENKO_IR_OUT) && (defined(ESP8266) || defined(ESP32))
|
8
|
-
|
9
|
-
#include <IRremoteESP8266.h>
|
10
|
-
#include <IRsend.h>
|
11
|
-
|
12
|
-
// CMD = 16
|
13
|
-
// Send an infrared signal.
|
14
|
-
void Denko::irSend(){
|
15
|
-
// Byte 1+ of auxMsg is already little-endian uint16 pulses.
|
16
|
-
uint16_t *pulseArray = reinterpret_cast<uint16_t *>(auxMsg + 1);
|
17
|
-
|
18
|
-
// Can work on any pin.
|
19
|
-
IRsend infraredOut(pin);
|
20
|
-
infraredOut.begin();
|
21
|
-
|
22
|
-
// auxMsg[0] is how many pulses were packed.
|
23
|
-
// val is frequency
|
24
|
-
infraredOut.sendRaw(pulseArray, auxMsg[0], val);
|
25
|
-
}
|
26
|
-
#endif
|
@@ -1,61 +0,0 @@
|
|
1
|
-
require_relative '../test_helper'
|
2
|
-
|
3
|
-
class BoardMock < Denko::Board
|
4
|
-
attr_reader :eeprom_stub
|
5
|
-
|
6
|
-
def eeprom_read(start_address, length)
|
7
|
-
# Initialize a fake EEPROM
|
8
|
-
@eeprom_stub ||= Array.new(eeprom_length){255}
|
9
|
-
|
10
|
-
# Pack it up like a string coming from the board.
|
11
|
-
string = @eeprom_stub[start_address, length].map{ |x| x.to_s }.join(",")
|
12
|
-
|
13
|
-
# Update ourselves with it.
|
14
|
-
self.update("254:#{start_address}-#{string}\n")
|
15
|
-
end
|
16
|
-
|
17
|
-
def eeprom_write(start_address, bytes)
|
18
|
-
@eeprom_stub[start_address, bytes.length] = bytes
|
19
|
-
end
|
20
|
-
end
|
21
|
-
|
22
|
-
class BuiltInEEPROMTest < Minitest::Test
|
23
|
-
def board
|
24
|
-
@board ||= BoardMock.new
|
25
|
-
end
|
26
|
-
|
27
|
-
def part
|
28
|
-
@part ||= board.eeprom
|
29
|
-
end
|
30
|
-
|
31
|
-
def test_pin_ee
|
32
|
-
assert_equal part.pin, 254
|
33
|
-
end
|
34
|
-
|
35
|
-
def test_loads_on_initialize_and_updates_correctly
|
36
|
-
assert_equal part.state, Array.new(board.eeprom_length){255}
|
37
|
-
end
|
38
|
-
|
39
|
-
def test_delegates_to_state_array
|
40
|
-
mock = Minitest::Mock.new
|
41
|
-
mock.expect(:[], 255, [0])
|
42
|
-
mock.expect(:[]=, 128, [1, 128])
|
43
|
-
mock.expect(:each, nil)
|
44
|
-
mock.expect(:each_with_index, nil)
|
45
|
-
|
46
|
-
part.stub(:state, mock) do
|
47
|
-
part[0]
|
48
|
-
part[1] = 128
|
49
|
-
part.each { |el| el }
|
50
|
-
part.each_with_index { |el| el }
|
51
|
-
end
|
52
|
-
end
|
53
|
-
|
54
|
-
def test_saves_to_the_board
|
55
|
-
part[0] = 128
|
56
|
-
part[part.length] = 127
|
57
|
-
part.save
|
58
|
-
assert_equal board.eeprom_stub[0], 128
|
59
|
-
assert_equal board.eeprom_stub[board.eeprom_length], 127
|
60
|
-
end
|
61
|
-
end
|
data/tutorial/01-led/led.fzz
DELETED
Binary file
|
data/tutorial/01-led/led.pdf
DELETED
Binary file
|
data/tutorial/01-led/led.rb
DELETED
@@ -1,73 +0,0 @@
|
|
1
|
-
#
|
2
|
-
# Example 1: Controlling an LED
|
3
|
-
#
|
4
|
-
require 'bundler/setup'
|
5
|
-
require 'denko'
|
6
|
-
|
7
|
-
# If the board is plugged into a USB port, we can connect with serial over USB.
|
8
|
-
connection = Denko::Connection::Serial.new
|
9
|
-
|
10
|
-
# Create a new board object, giving the connection.
|
11
|
-
board = Denko::Board.new(connection)
|
12
|
-
|
13
|
-
#
|
14
|
-
# Create an LED object, giving the board, and the pin that the positive
|
15
|
-
# leg of the LED is connected to. The longer leg is usually positive.
|
16
|
-
#
|
17
|
-
# See led.pdf in this folder for a hook-up diagram.
|
18
|
-
# Use a current limiting resistor with external LEDs to protect them.
|
19
|
-
#
|
20
|
-
# The on-board LED can also be used. It is connected to pin 13 on most Arduinos,
|
21
|
-
# but can vary for other boards. The symbol :LED_BUILTIN should map to the right pin.
|
22
|
-
# If it doesn't, change it to the pin number from your board's documentation.
|
23
|
-
#
|
24
|
-
# Note: Some boards use an addressable LED on-board. In those cases, connect an external
|
25
|
-
# LED and use its pin for this example instead.
|
26
|
-
#
|
27
|
-
led = Denko::LED.new(board: board, pin: :LED_BUILTIN)
|
28
|
-
|
29
|
-
# Now we can make it blink.
|
30
|
-
puts "Blinking every half second..."
|
31
|
-
|
32
|
-
#
|
33
|
-
# A digital output can only have one of two states:
|
34
|
-
# 1 / high / on
|
35
|
-
# 0 / low / off
|
36
|
-
# We can use led.digital_write to set it directly, or named convenience methods.
|
37
|
-
# These 3 lines all do the same thing: turn on, wait half a second, turn off.
|
38
|
-
#
|
39
|
-
led.digital_write(1); sleep 0.5; led.digital_write(0)
|
40
|
-
led.high; sleep 0.5; led.low
|
41
|
-
led.on; sleep 0.5; led.off
|
42
|
-
|
43
|
-
#
|
44
|
-
# led.toggle will set it to the opposite state each time it's called.
|
45
|
-
# Keep it blinking for 3 more seconds using #toggle.
|
46
|
-
#
|
47
|
-
6.times do
|
48
|
-
led.toggle
|
49
|
-
sleep 0.5
|
50
|
-
end
|
51
|
-
|
52
|
-
#
|
53
|
-
# What if we want to blink in the background?
|
54
|
-
#
|
55
|
-
# led.blink runs in a separate thread, managed by the led, and doesn't block the
|
56
|
-
# main thread. Give it the blink interval in seconds.
|
57
|
-
#
|
58
|
-
led.blink 0.5
|
59
|
-
puts "Blinking in the background... Hello from the main thread!"
|
60
|
-
sleep 3
|
61
|
-
|
62
|
-
#
|
63
|
-
# Calling a method that sets the state (#digital_write, #high, #low, #on, #off)
|
64
|
-
# automatically stops the blink thread.
|
65
|
-
#
|
66
|
-
puts "Turning off for 2 seconds..."
|
67
|
-
led.off
|
68
|
-
sleep 2
|
69
|
-
|
70
|
-
# Blink faster indefinitely.
|
71
|
-
puts "Blinking faster forever... (Press Ctrl+C to exit)"
|
72
|
-
led.blink 0.1
|
73
|
-
sleep
|
Binary file
|
Binary file
|
@@ -1,64 +0,0 @@
|
|
1
|
-
#
|
2
|
-
# Example 2: Using a Button
|
3
|
-
#
|
4
|
-
require 'bundler/setup'
|
5
|
-
require 'denko'
|
6
|
-
|
7
|
-
# Set up the board, connecting with serial over USB.
|
8
|
-
board = Denko::Board.new(Denko::Connection::Serial.new)
|
9
|
-
|
10
|
-
#
|
11
|
-
# Create an object for a momentary button, giving the board, and the pin that
|
12
|
-
# the ungrounded side of the button is connected to.
|
13
|
-
#
|
14
|
-
# `pullup: true` tells the board to keep the input pin high (logical 1) when the
|
15
|
-
# button is not pressed. Without this (or an external pullup resistor), the pin
|
16
|
-
# might float between 0 and 1, giving incorrect readings. When the button is
|
17
|
-
# pressed, it pulls the input pin down to ground (0).
|
18
|
-
#
|
19
|
-
# See button.pdf in this folder for a hook-up diagram.
|
20
|
-
#
|
21
|
-
button = Denko::DigitalIO::Button.new(board: board, pin: 7, pullup: true)
|
22
|
-
|
23
|
-
#
|
24
|
-
# As soon as a Button (or any DigitalInput) is created, the board starts
|
25
|
-
# listening for changes to the physical button. When that happens, our button
|
26
|
-
# object is notified. To catch these notifications, we have to use a callback.
|
27
|
-
# button.add_callback saves a block of code to run each time the button state changes.
|
28
|
-
#
|
29
|
-
# The callback below checks if the state is 0 (the button went from up to down),
|
30
|
-
# then counts and prints the number of times pressed.
|
31
|
-
#
|
32
|
-
presses = 0
|
33
|
-
button.add_callback(:count_presses) do |state|
|
34
|
-
if state == 0
|
35
|
-
presses = presses + 1
|
36
|
-
puts "Button press ##{presses}"
|
37
|
-
end
|
38
|
-
end
|
39
|
-
|
40
|
-
# Wait for the button to be pressed 3 times.
|
41
|
-
sleep 0.005 while presses < 3
|
42
|
-
|
43
|
-
# Button keeps its callbacks in a Hash. We can be specific and use keys to add and remove.
|
44
|
-
button.remove_callback(:count_presses)
|
45
|
-
|
46
|
-
# Or remove them all. Either way, the block above won't run anymore.
|
47
|
-
button.remove_callbacks
|
48
|
-
|
49
|
-
#
|
50
|
-
# button.down and button.up add callbacks that automatically check state for you.
|
51
|
-
#
|
52
|
-
# #down runs only when state goes from high (1) to low (0).
|
53
|
-
# #up runs only when state goes from low (0) to high (1).
|
54
|
-
#
|
55
|
-
# We can use them to control the internal LED from example 1.
|
56
|
-
#
|
57
|
-
led = Denko::LED.new(board: board, pin: 13)
|
58
|
-
|
59
|
-
button.up { led.off }
|
60
|
-
button.down { led.on }
|
61
|
-
|
62
|
-
puts "Press the button to turn on the LED... (Ctrl+C to exit)"
|
63
|
-
|
64
|
-
sleep
|
Binary file
|
Binary file
|