denko 0.14.0 → 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_atmega_avr.yml +2 -1
- data/.github/workflows/build_atmega_megaavr.yml +2 -1
- data/.github/workflows/build_atsam3x.yml +1 -0
- data/.github/workflows/build_atsamd21.yml +2 -1
- data/.github/workflows/build_esp32.yml +4 -2
- data/.github/workflows/build_esp32c3.yml +4 -3
- data/.github/workflows/build_esp32c6.yml +4 -2
- data/.github/workflows/build_esp32h2.yml +4 -2
- data/.github/workflows/build_esp32s2.yml +4 -2
- data/.github/workflows/build_esp32s3.yml +4 -2
- data/.github/workflows/build_esp8266.yml +2 -1
- data/.github/workflows/build_ra4m1.yml +1 -0
- data/.github/workflows/build_rp2040.yml +4 -3
- data/.github/workflows/ruby.yml +1 -1
- data/CHANGELOG.md +203 -0
- data/DEPS_CLI.md +16 -16
- data/DEPS_IDE.md +31 -30
- data/MICROCONTROLLERS.md +103 -0
- data/PERIPHERALS.md +178 -0
- data/README.md +28 -21
- data/denko.gemspec +6 -1
- data/lib/denko/analog_io/ads1118.rb +5 -5
- data/lib/denko/analog_io/ads111x.rb +23 -19
- data/lib/denko/analog_io/joystick.rb +87 -0
- data/lib/denko/analog_io/potentiometer.rb +1 -5
- data/lib/denko/analog_io.rb +22 -8
- data/lib/denko/behaviors/bus_controller.rb +2 -1
- data/lib/denko/behaviors/bus_peripheral.rb +1 -1
- data/lib/denko/behaviors/callbacks.rb +18 -16
- data/lib/denko/behaviors/component.rb +0 -4
- data/lib/denko/behaviors/lifecycle.rb +1 -1
- data/lib/denko/behaviors/listener.rb +9 -3
- data/lib/denko/behaviors/multi_pin.rb +4 -6
- data/lib/denko/behaviors/poller.rb +11 -2
- data/lib/denko/behaviors/reader.rb +109 -21
- data/lib/denko/behaviors/single_pin.rb +2 -4
- data/lib/denko/behaviors/state.rb +18 -13
- data/lib/denko/behaviors/threaded.rb +19 -8
- data/lib/denko/behaviors.rb +36 -23
- data/lib/denko/board/eeprom.rb +1 -1
- data/lib/denko/board/i2c.rb +1 -1
- data/lib/denko/board/i2c_bit_bang.rb +9 -5
- data/lib/denko/board/map.rb +6 -2
- data/lib/denko/board/one_wire.rb +3 -3
- data/lib/denko/board/spi.rb +30 -30
- data/lib/denko/board/spi_bit_bang.rb +8 -11
- data/lib/denko/board.rb +6 -3
- data/lib/denko/connection/flow_control.rb +1 -1
- data/lib/denko/connection/serial.rb +5 -5
- data/lib/denko/digital_io/output.rb +12 -4
- data/lib/denko/digital_io/pcf8574.rb +114 -0
- data/lib/denko/digital_io/rotary_encoder.rb +10 -6
- data/lib/denko/digital_io.rb +24 -6
- 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 +24 -20
- 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 +17 -21
- 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 -228
- 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 -4
- 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/{mutex_stub.rb → helpers/mutex_stub.rb} +6 -0
- data/lib/denko/helpers.rb +6 -0
- data/lib/denko/i2c/bit_bang.rb +1 -0
- data/lib/denko/i2c/bus_common.rb +9 -4
- data/lib/denko/i2c/peripheral.rb +5 -1
- data/lib/denko/i2c.rb +17 -4
- data/lib/denko/led/apa102.rb +1 -3
- data/lib/denko/led/base.rb +5 -0
- data/lib/denko/led/rgb.rb +16 -10
- data/lib/denko/led/seven_segment.rb +1 -1
- data/lib/denko/led.rb +17 -8
- data/lib/denko/motor/{stepper.rb → a3967.rb} +1 -1
- data/lib/denko/motor/servo.rb +16 -6
- data/lib/denko/motor.rb +16 -3
- data/lib/denko/one_wire/bus.rb +20 -16
- data/lib/denko/one_wire/bus_enumerator.rb +25 -14
- data/lib/denko/one_wire/helper.rb +4 -2
- data/lib/denko/one_wire.rb +18 -5
- data/lib/denko/pulse_io/buzzer.rb +2 -6
- data/lib/denko/pulse_io/ir_output.rb +1 -5
- data/lib/denko/pulse_io/pwm_output.rb +56 -31
- data/lib/denko/pulse_io.rb +17 -3
- data/lib/denko/rtc/ds3231.rb +4 -3
- data/lib/denko/rtc.rb +14 -1
- data/lib/denko/sensor/aht.rb +16 -20
- data/lib/denko/sensor/bme280.rb +23 -36
- data/lib/denko/sensor/bmp180.rb +8 -13
- data/lib/denko/sensor/dht.rb +17 -7
- data/lib/denko/sensor/ds18b20.rb +5 -4
- data/lib/denko/sensor/hdc1080.rb +174 -0
- data/lib/denko/sensor/htu21d.rb +17 -6
- data/lib/denko/sensor/htu31d.rb +6 -5
- data/lib/denko/sensor/jsnsr04t.rb +49 -0
- data/lib/denko/sensor/qmp6988.rb +14 -30
- data/lib/denko/sensor/rcwl9620.rb +1 -0
- data/lib/denko/sensor/sht3x.rb +6 -5
- data/lib/denko/sensor/sht4x.rb +125 -0
- data/lib/denko/sensor/vl53l0x.rb +58 -0
- data/lib/denko/sensor.rb +33 -15
- data/lib/denko/spi/base_register.rb +11 -7
- data/lib/denko/spi/bus_common.rb +12 -15
- data/lib/denko/spi/input_register.rb +6 -6
- data/lib/denko/spi/output_register.rb +13 -4
- data/lib/denko/spi/peripheral.rb +82 -84
- data/lib/denko/spi.rb +20 -10
- data/lib/denko/uart/bit_bang.rb +2 -27
- data/lib/denko/uart/common.rb +33 -0
- data/lib/denko/uart/hardware.rb +1 -26
- data/lib/denko/uart.rb +16 -2
- data/lib/denko/version.rb +1 -1
- data/lib/denko.rb +22 -25
- data/lib/denko_cli/targets.rb +7 -7
- data/lib/denko_cli/targets.txt +19 -20
- data/src/lib/Denko.cpp +26 -13
- data/src/lib/Denko.h +4 -4
- data/src/lib/DenkoDefines.h +7 -26
- data/src/lib/DenkoLEDArray.cpp +1 -8
- data/src/lib/DenkoSPI.cpp +31 -29
- data/src/lib/DenkoSPIBB.cpp +12 -14
- data/test/analog_io/input_test.rb +1 -1
- data/test/analog_io/potentiometer_test.rb +2 -2
- data/test/behaviors/bus_peripheral_test.rb +4 -4
- data/test/behaviors/callbacks_test.rb +20 -10
- data/test/behaviors/component_test.rb +18 -8
- data/test/board/board_test.rb +9 -9
- data/test/board/one_wire_test.rb +25 -14
- data/test/board/spi_test.rb +31 -15
- data/test/digital_io/input_test.rb +2 -2
- 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 +93 -30
- data/test/i2c/peripheral_test.rb +2 -2
- data/test/led/apa102_test.rb +24 -0
- data/test/led/rgb_test.rb +4 -4
- data/test/motor/{stepper_test.rb → a3967_test.rb} +2 -2
- data/test/one_wire/bus_enumerator_test.rb +1 -1
- data/test/one_wire/bus_test.rb +42 -35
- data/test/one_wire/peripheral_test.rb +5 -17
- data/test/pulse_io/ir_output_test.rb +5 -0
- data/test/pulse_io/pwm_output_test.rb +10 -10
- data/test/rtc/ds3231_test.rb +3 -2
- data/test/sensor/dht_test.rb +11 -11
- data/test/spi/bitbang_test.rb +27 -0
- data/test/spi/bus_test.rb +19 -29
- data/test/spi/input_register_test.rb +2 -2
- data/test/spi/{peripheral_multi_pin_test.rb → peripheral_test.rb} +25 -5
- data/test/test_helper.rb +44 -124
- data/vendor/board-maps/BoardMap.h +264 -0
- data/vendor/board-maps/yaml/ALFREDO_NOU3.yml +2 -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/BPI_LEAF_S3.yml +0 -1
- 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/EDGES3D.yml +25 -0
- data/vendor/board-maps/yaml/ESP32C6_DEV.yml +3 -4
- data/vendor/board-maps/yaml/ESP32C6_THING_PLUS.yml +0 -1
- data/vendor/board-maps/yaml/ESP32H2_DEV.yml +0 -1
- data/vendor/board-maps/yaml/ESP32H2_DEVKIT_LIPO.yml +0 -1
- data/vendor/board-maps/yaml/ESP32P4_DEV.yml +35 -0
- data/vendor/board-maps/yaml/ESP32S2_DEV.yml +0 -1
- data/vendor/board-maps/yaml/ESP32S2_DEVKIT_LIPO.yml +0 -1
- data/vendor/board-maps/yaml/ESP32S2_DEVKIT_LIPO_USB.yml +0 -1
- data/vendor/board-maps/yaml/ESP32_2432S028R.yml +14 -0
- data/vendor/board-maps/yaml/FEATHERS3.yml +1 -1
- data/vendor/board-maps/yaml/FRI3D_2024_ESP32S3.yml +43 -0
- data/vendor/board-maps/yaml/GEEKBLE_ESP32C3.yml +0 -1
- data/vendor/board-maps/yaml/GEEKBLE_NANO_ESP32S3.yml +25 -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/HUIDU_HD_WF2.yml +5 -0
- data/vendor/board-maps/yaml/HUIDU_HD_WF4.yml +1 -0
- 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/LOLIN_C3_MINI.yml +0 -1
- data/vendor/board-maps/yaml/LOLIN_C3_PICO.yml +1 -2
- data/vendor/board-maps/yaml/LoPy.yml +0 -1
- data/vendor/board-maps/yaml/LoPy4.yml +0 -1
- data/vendor/board-maps/yaml/M5STACK_DINMETER.yml +8 -0
- data/vendor/board-maps/yaml/M5STACK_FIRE.yml +1 -1
- data/vendor/board-maps/yaml/OMGS3.yml +25 -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/PYCOM_GPY.yml +0 -1
- data/vendor/board-maps/yaml/SENSEBOX_MCU_ESP32S2.yml +1 -1
- data/vendor/board-maps/yaml/SPARKFUN_ESP32S3_THING_PLUS.yml +13 -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_C6.yml +0 -1
- 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/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/WIPY3.yml +0 -1
- data/vendor/board-maps/yaml/WS_ESP32_S3_MATRIX.yml +38 -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
- metadata +116 -101
- data/.vscode/settings.json +0 -5
- data/.vscode/tasks.json +0 -20
- data/HARDWARE.md +0 -263
- data/benchmarks/analog_listen.rb +0 -49
- data/benchmarks/digital_write.rb +0 -28
- data/benchmarks/i2c_ssd1306_refresh.rb +0 -91
- data/examples/advanced/m5_env3.rb +0 -46
- data/examples/advanced/rotary_encoder_mac_volume.rb +0 -53
- data/examples/advanced/ssd1306_time_temp_rh.rb +0 -43
- data/examples/analog_io/ads1100.rb +0 -48
- data/examples/analog_io/ads1115.rb +0 -57
- data/examples/analog_io/ads1118.rb +0 -65
- data/examples/analog_io/dac_loopback.rb +0 -34
- data/examples/analog_io/input.rb +0 -56
- data/examples/analog_io/input_smoothing.rb +0 -27
- data/examples/analog_io/potentiometer.rb +0 -31
- data/examples/connection/binary_echo.rb +0 -34
- data/examples/connection/tcp.rb +0 -19
- data/examples/digital_io/button.rb +0 -17
- data/examples/digital_io/relay.rb +0 -17
- data/examples/digital_io/rotary_encoder.rb +0 -36
- data/examples/display/hd44780.png +0 -0
- data/examples/display/hd44780.rb +0 -47
- data/examples/display/ssd1306.rb +0 -43
- data/examples/display/ssd1306_s2_pico.rb +0 -29
- data/examples/eeprom/built_in.rb +0 -32
- data/examples/i2c/search.rb +0 -39
- data/examples/led/apa102_bounce.rb +0 -32
- data/examples/led/apa102_fade.rb +0 -44
- data/examples/led/builtin_blink.rb +0 -14
- data/examples/led/builtin_fade.rb +0 -19
- data/examples/led/rgb_led.rb +0 -31
- data/examples/led/seven_segment_char_echo.rb +0 -17
- data/examples/led/ws2812_bounce.rb +0 -30
- data/examples/led/ws2812_builtin_blink.rb +0 -22
- data/examples/led/ws2812_fade.rb +0 -43
- data/examples/motor/l298.rb +0 -45
- data/examples/motor/servo.rb +0 -17
- data/examples/motor/stepper.png +0 -0
- data/examples/motor/stepper.rb +0 -43
- data/examples/one_wire/search.rb +0 -32
- data/examples/pulse_io/buzzer.rb +0 -35
- data/examples/pulse_io/ir_output.rb +0 -51
- data/examples/pulse_io/pwm_output.rb +0 -30
- data/examples/rtc/ds3231.rb +0 -31
- data/examples/sensor/aht10.rb +0 -17
- data/examples/sensor/aht20.rb +0 -17
- data/examples/sensor/bme280.rb +0 -38
- data/examples/sensor/bmp180.rb +0 -26
- data/examples/sensor/dht.rb +0 -29
- data/examples/sensor/ds18b20.rb +0 -57
- data/examples/sensor/generic_pir.rb +0 -27
- data/examples/sensor/hcsr04.rb +0 -17
- data/examples/sensor/htu21d.rb +0 -43
- data/examples/sensor/htu31d.rb +0 -33
- data/examples/sensor/neat_tph_readings.rb +0 -32
- data/examples/sensor/qmp6988.rb +0 -51
- data/examples/sensor/rcwl9620.rb +0 -15
- data/examples/sensor/sht3x.rb +0 -32
- data/examples/spi/bitbang_loopback.rb +0 -46
- data/examples/spi/input_register.rb +0 -40
- data/examples/spi/output_register.rb +0 -41
- data/examples/spi/ssd_through_registers.rb +0 -28
- data/examples/spi/two_registers.rb +0 -40
- data/examples/uart/bit_bang_demo.rb +0 -25
- data/examples/uart/board_passthrough.rb +0 -40
- data/examples/uart/hardware_loopback.rb +0 -16
- data/lib/denko/eeprom/built_in.rb +0 -72
- data/lib/denko/fonts.rb +0 -106
- data/test/eeprom/built_in_test.rb +0 -61
- data/test/spi/peripheral_single_pin_test.rb +0 -48
- 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 -65
- data/tutorial/03-potentiometer/potentiometer.fzz +0 -0
- data/tutorial/03-potentiometer/potentiometer.pdf +0 -0
- data/tutorial/03-potentiometer/potentiometer.rb +0 -66
- 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 -64
- 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
@@ -1,14 +0,0 @@
|
|
1
|
-
#
|
2
|
-
# Blink example for standard built-in LEDs named :LED_BUILTIN
|
3
|
-
#
|
4
|
-
require 'bundler/setup'
|
5
|
-
require 'denko'
|
6
|
-
|
7
|
-
PIN = :LED_BUILTIN
|
8
|
-
|
9
|
-
board = Denko::Board.new(Denko::Connection::Serial.new)
|
10
|
-
led = Denko::LED.new(board: board, pin: PIN)
|
11
|
-
|
12
|
-
led.blink 0.5
|
13
|
-
|
14
|
-
sleep
|
@@ -1,19 +0,0 @@
|
|
1
|
-
#
|
2
|
-
# Blink example for standard built-in LEDs named :LED_BUILTIN
|
3
|
-
#
|
4
|
-
require 'bundler/setup'
|
5
|
-
require 'denko'
|
6
|
-
|
7
|
-
PIN = :LED_BUILTIN
|
8
|
-
|
9
|
-
board = Denko::Board.new(Denko::Connection::Serial.new)
|
10
|
-
led = Denko::LED.new(board: board, pin: PIN)
|
11
|
-
|
12
|
-
min = 0
|
13
|
-
max = 100
|
14
|
-
values = (min..max).to_a + (min..max-1).to_a.reverse
|
15
|
-
|
16
|
-
values.cycle do |value|
|
17
|
-
led.duty = value
|
18
|
-
sleep 0.005
|
19
|
-
end
|
data/examples/led/rgb_led.rb
DELETED
@@ -1,31 +0,0 @@
|
|
1
|
-
#
|
2
|
-
# A standard 3 pin RGB LED (not single pin addressable), on 3 PWM pins.
|
3
|
-
#
|
4
|
-
require 'bundler/setup'
|
5
|
-
require 'denko'
|
6
|
-
|
7
|
-
RED_PIN = 11
|
8
|
-
GREEN_PIN = 10
|
9
|
-
BLUE_PIN = 9
|
10
|
-
|
11
|
-
board = Denko::Board.new(Denko::Connection::Serial.new)
|
12
|
-
rgb_led = Denko::LED::RGB.new board: board,
|
13
|
-
pins: {red: RED_PIN, green: GREEN_PIN, blue: BLUE_PIN}
|
14
|
-
|
15
|
-
# Set these predefined colors with symbols.
|
16
|
-
[:red, :green, :blue, :cyan, :yellow, :magenta, :white, :off].each do |color|
|
17
|
-
rgb_led.color = color
|
18
|
-
sleep 0.5
|
19
|
-
end
|
20
|
-
|
21
|
-
# Set duty cycle for each "sub LED".
|
22
|
-
loop do
|
23
|
-
rgb_led.red.duty = 100
|
24
|
-
rgb_led.green.duty = 50
|
25
|
-
rgb_led.blue.duty = 0
|
26
|
-
sleep 0.5
|
27
|
-
rgb_led.red.duty = 100
|
28
|
-
rgb_led.green.duty = 0
|
29
|
-
rgb_led.blue.duty = 50
|
30
|
-
sleep 0.5
|
31
|
-
end
|
@@ -1,17 +0,0 @@
|
|
1
|
-
#
|
2
|
-
# Echo pressed keys to a seven segment LED.
|
3
|
-
#
|
4
|
-
require 'bundler/setup'
|
5
|
-
require 'denko'
|
6
|
-
|
7
|
-
PINS = { cathode: 10, a: 3, b: 4, c: 5, d: 6, e: 7, f: 8, g: 9 }
|
8
|
-
|
9
|
-
board = Denko::Board.new(Denko::Connection::Serial.new)
|
10
|
-
ssd = Denko::LED::SevenSegment.new board: board,
|
11
|
-
pins: PINS
|
12
|
-
|
13
|
-
# Turn off the ssd on exit
|
14
|
-
trap("SIGINT") { exit !ssd.off }
|
15
|
-
|
16
|
-
# Display each new line on the ssd
|
17
|
-
loop { ssd.display(gets.chomp) }
|
@@ -1,30 +0,0 @@
|
|
1
|
-
#
|
2
|
-
# Walk a pixel along a WS2812 strip and back, changing color each loop.
|
3
|
-
#
|
4
|
-
require 'bundler/setup'
|
5
|
-
require 'denko'
|
6
|
-
|
7
|
-
PIN = 4
|
8
|
-
PIXELS = 8
|
9
|
-
|
10
|
-
RED = [255, 0, 0]
|
11
|
-
GREEN = [0, 255, 0]
|
12
|
-
BLUE = [0, 0, 255]
|
13
|
-
WHITE = [255, 255, 255]
|
14
|
-
COLORS = [RED, GREEN, BLUE, WHITE]
|
15
|
-
|
16
|
-
positions = (0..PIXELS-1).to_a + (1..PIXELS-2).to_a.reverse
|
17
|
-
|
18
|
-
board = Denko::Board.new(Denko::Connection::Serial.new)
|
19
|
-
strip = Denko::LED::WS2812.new(board: board, pin: PIN, length: PIXELS)
|
20
|
-
|
21
|
-
loop do
|
22
|
-
COLORS.each do |color|
|
23
|
-
positions.each do |index|
|
24
|
-
strip.clear
|
25
|
-
strip[index] = color
|
26
|
-
strip.show
|
27
|
-
sleep 0.05
|
28
|
-
end
|
29
|
-
end
|
30
|
-
end
|
@@ -1,22 +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
|
-
PIN = :LED_BUILTIN
|
9
|
-
WHITE = [255, 255, 255]
|
10
|
-
OFF = [0, 0, 0]
|
11
|
-
|
12
|
-
board = Denko::Board.new(Denko::Connection::Serial.new)
|
13
|
-
strip = Denko::LED::WS2812.new(board: board, pin: PIN, length: 1)
|
14
|
-
|
15
|
-
loop do
|
16
|
-
strip[0] = WHITE
|
17
|
-
strip.show
|
18
|
-
sleep 0.5
|
19
|
-
strip[0] = OFF
|
20
|
-
strip.show
|
21
|
-
sleep 0.5
|
22
|
-
end
|
data/examples/led/ws2812_fade.rb
DELETED
@@ -1,43 +0,0 @@
|
|
1
|
-
#
|
2
|
-
# Fade colors along a WS2812, and over time.
|
3
|
-
#
|
4
|
-
require 'bundler/setup'
|
5
|
-
require 'denko'
|
6
|
-
|
7
|
-
PIN = 4
|
8
|
-
PIXELS = 8
|
9
|
-
|
10
|
-
board = Denko::Board.new(Denko::Connection::Serial.new)
|
11
|
-
strip = Denko::LED::WS2812.new(board: board, pin: PIN, length: PIXELS)
|
12
|
-
|
13
|
-
min = 0
|
14
|
-
max = 255
|
15
|
-
gap = 5
|
16
|
-
values = (min..max).step(gap).to_a + (min..max-gap).step(gap).to_a.reverse
|
17
|
-
|
18
|
-
color_values= []
|
19
|
-
# Red
|
20
|
-
values.each { |v| color_values << [v, 0, 0] }
|
21
|
-
# Green
|
22
|
-
values.each { |v| color_values << [0, v, 0] }
|
23
|
-
# Blue
|
24
|
-
values.each { |v| color_values << [0, 0, v] }
|
25
|
-
# White
|
26
|
-
values.each { |v| color_values << [v, v, v] }
|
27
|
-
|
28
|
-
loop do
|
29
|
-
start = 0
|
30
|
-
finish = PIXELS - 1
|
31
|
-
while (finish < color_values.length)
|
32
|
-
slice = color_values[start..finish]
|
33
|
-
|
34
|
-
slice.each_with_index do |value, i|
|
35
|
-
strip[i] = value
|
36
|
-
end
|
37
|
-
strip.show
|
38
|
-
sleep 0.025
|
39
|
-
|
40
|
-
start += 1
|
41
|
-
finish += 1
|
42
|
-
end
|
43
|
-
end
|
data/examples/motor/l298.rb
DELETED
@@ -1,45 +0,0 @@
|
|
1
|
-
#
|
2
|
-
# Drive a DC motor with the L298 H-Bridge driver.
|
3
|
-
#
|
4
|
-
require 'bundler/setup'
|
5
|
-
require 'denko'
|
6
|
-
board = Denko::Board.new(Denko::Connection::Serial.new)
|
7
|
-
|
8
|
-
PINS = { direction1: 8, direction2: 9, enable: 10 }
|
9
|
-
|
10
|
-
# This is only 1 channel of the driver. Make a new object for each channel.
|
11
|
-
motor = Denko::Motor::L298.new(board: board, pins: PINS)
|
12
|
-
|
13
|
-
# Off without braking (initial state).
|
14
|
-
# motor.off
|
15
|
-
# motor.idle
|
16
|
-
|
17
|
-
# Go forward at half speed for a while.
|
18
|
-
motor.forward(50)
|
19
|
-
sleep 2
|
20
|
-
|
21
|
-
# Change direction.
|
22
|
-
motor.reverse(50)
|
23
|
-
sleep 2
|
24
|
-
|
25
|
-
# Speed up without changing direction.
|
26
|
-
motor.speed = 100
|
27
|
-
sleep 2
|
28
|
-
|
29
|
-
# Brake to stop quickly.
|
30
|
-
motor.brake
|
31
|
-
sleep 1
|
32
|
-
|
33
|
-
# Change from brake to forward, but 0 speed.
|
34
|
-
motor.forward(0)
|
35
|
-
sleep 1
|
36
|
-
|
37
|
-
# Speed up in 5% increments.
|
38
|
-
(1..20).each do |step|
|
39
|
-
sleep 0.5
|
40
|
-
motor.speed = step * 5
|
41
|
-
end
|
42
|
-
|
43
|
-
# Turn it off.
|
44
|
-
motor.off
|
45
|
-
board.finish_write
|
data/examples/motor/servo.rb
DELETED
@@ -1,17 +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
|
-
PIN = 9
|
8
|
-
|
9
|
-
board = Denko::Board.new(Denko::Connection::Serial.new)
|
10
|
-
servo = Denko::Motor::Servo.new(board: board, pin: PIN)
|
11
|
-
|
12
|
-
# Add different angles (in degrees) to the array below to try out your servo.
|
13
|
-
# Note: Some servos may not have a full 180 degree sweep.
|
14
|
-
[0, 90, 180, 90].cycle do |angle|
|
15
|
-
servo.position = angle
|
16
|
-
sleep 0.5
|
17
|
-
end
|
data/examples/motor/stepper.png
DELETED
Binary file
|
data/examples/motor/stepper.rb
DELETED
@@ -1,43 +0,0 @@
|
|
1
|
-
#
|
2
|
-
# Use a stepper motor with the EasyDriver board: https://www.sparkfun.com/products/12779
|
3
|
-
#
|
4
|
-
require 'bundler/setup'
|
5
|
-
require 'denko'
|
6
|
-
|
7
|
-
PINS = { slp: 6, enable: 7, direction: 8, step: 10, ms1: 11, ms2: 12 }
|
8
|
-
|
9
|
-
board = Denko::Board.new(Denko::Connection::Serial.new)
|
10
|
-
stepper = Denko::Motor::Stepper.new(board: board, pins: PINS)
|
11
|
-
|
12
|
-
# Default is 8 microsteps. Use 2 to move faster.
|
13
|
-
stepper.microsteps = 2
|
14
|
-
|
15
|
-
# 400 steps is now 1 revolution for a 200 step motor.
|
16
|
-
400.times do
|
17
|
-
stepper.step_ccw
|
18
|
-
sleep 0.002
|
19
|
-
end
|
20
|
-
|
21
|
-
# Sleep the driver and wait a while.
|
22
|
-
stepper.sleep
|
23
|
-
sleep 1
|
24
|
-
|
25
|
-
# Wake it up and set to full steps.
|
26
|
-
stepper.wake
|
27
|
-
stepper.microsteps = 1
|
28
|
-
|
29
|
-
#
|
30
|
-
# Now 200 steps the other way will return to the start.
|
31
|
-
# Longer sleep times to match bigger steps. Adjust for 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
|
-
# Writing to the board is done asynchronously.
|
42
|
-
# Make sure all commands are written before exit.
|
43
|
-
board.finish_write
|
data/examples/one_wire/search.rb
DELETED
@@ -1,32 +0,0 @@
|
|
1
|
-
#
|
2
|
-
# Search a 1-Wire bus.
|
3
|
-
#
|
4
|
-
require 'bundler/setup'
|
5
|
-
require 'denko'
|
6
|
-
|
7
|
-
PIN = 4
|
8
|
-
|
9
|
-
board = Denko::Board.new(Denko::Connection::Serial.new)
|
10
|
-
bus = Denko::OneWire::Bus.new(board: board, pin: PIN)
|
11
|
-
|
12
|
-
# Call #device_present to reset the bus and return presence pulse as a boolean.
|
13
|
-
if bus.device_present?
|
14
|
-
puts "Devices present on bus..."; puts
|
15
|
-
else
|
16
|
-
puts "No devices present on bus... Quitting..."
|
17
|
-
return
|
18
|
-
end
|
19
|
-
|
20
|
-
# The bus detects parasite power automatically when initialized.
|
21
|
-
# It can tell that parasite power is in use, but not by WHICH devices.
|
22
|
-
if bus.parasite_power
|
23
|
-
puts "Parasite power detected..."; puts
|
24
|
-
end
|
25
|
-
|
26
|
-
# Calling #search finds connected devices and stores them in #found_devices.
|
27
|
-
# Each hash contains a device's ROM address and matching Ruby class if one exists.
|
28
|
-
bus.search
|
29
|
-
count = bus.found_devices.count
|
30
|
-
puts "Found #{count} device#{'s' if count > 1} on the bus:"
|
31
|
-
|
32
|
-
puts bus.found_devices.inspect
|
data/examples/pulse_io/buzzer.rb
DELETED
@@ -1,35 +0,0 @@
|
|
1
|
-
#
|
2
|
-
# Example of playing a melody on a piezoelectric buzzer.
|
3
|
-
#
|
4
|
-
require 'bundler/setup'
|
5
|
-
require 'denko'
|
6
|
-
|
7
|
-
PIN = 9
|
8
|
-
|
9
|
-
board = Denko::Board.new(Denko::Connection::Serial.new)
|
10
|
-
buzzer = Denko::PulseIO::Buzzer.new(board: board, pin: PIN)
|
11
|
-
|
12
|
-
C4 = 262
|
13
|
-
D4 = 294
|
14
|
-
E4 = 330
|
15
|
-
|
16
|
-
notes = [
|
17
|
-
[E4, 1], [D4, 1], [C4, 1], [D4, 1], [E4, 1], [E4, 1], [E4, 2],
|
18
|
-
[D4, 1], [D4, 1], [D4, 2], [E4, 1], [E4, 1], [E4, 2],
|
19
|
-
[E4, 1], [D4, 1], [C4, 1], [D4, 1], [E4, 1], [E4, 1], [E4, 1], [E4, 1],
|
20
|
-
[D4, 1], [D4, 1], [E4, 1], [D4, 1], [C4, 4],
|
21
|
-
]
|
22
|
-
|
23
|
-
bpm = 240
|
24
|
-
beat_time = 60.to_f / bpm
|
25
|
-
|
26
|
-
notes.each do |note|
|
27
|
-
buzzer.tone(note[0])
|
28
|
-
sleep note[1] * beat_time
|
29
|
-
|
30
|
-
# Stop for a bit so notes are properly defined.
|
31
|
-
buzzer.stop; sleep 0.010
|
32
|
-
end
|
33
|
-
|
34
|
-
buzzer.stop
|
35
|
-
board.finish_write
|
@@ -1,51 +0,0 @@
|
|
1
|
-
#
|
2
|
-
# Test of the IROutput (infrared transmitter) class.
|
3
|
-
# The specific NEC code is one taken from the Arduino example:
|
4
|
-
# https://github.com/Arduino-IRremote/Arduino-IRremote/tree/master/examples/SendDemo
|
5
|
-
#
|
6
|
-
# To test your emitter works, flash the recieve sketch on a second board:
|
7
|
-
# https://github.com/Arduino-IRremote/Arduino-IRremote/tree/master/examples/ReceiveDemo
|
8
|
-
# Attach an IR receiver to the receive pin (2 for Atmel AVR) and observe its serial output.
|
9
|
-
#
|
10
|
-
# If you don't have 2 boards, use that sketch to capture a code from a remote.
|
11
|
-
# Copy the raw code (list of numbers in curly braces) and modify into a Ruby array.
|
12
|
-
# Put denko firmare back on your board, then test if the IR code operates your device.
|
13
|
-
#
|
14
|
-
# IR codes are also available from sites like:
|
15
|
-
# https://github.com/zmoteio/irdb.tk
|
16
|
-
# If formatted numbers with + and - prepended, you need to convert into a Ruby array first.
|
17
|
-
#
|
18
|
-
require 'bundler/setup'
|
19
|
-
require 'denko'
|
20
|
-
|
21
|
-
PIN = 4
|
22
|
-
|
23
|
-
# Note: If testing with 2 boards on one computer, be explicit about which serial device
|
24
|
-
# runs denko. Use the second Serial.new call below and modify device: as needed.
|
25
|
-
# Monitor the receiver board in the Arduino (or some other) serial monitor.
|
26
|
-
#
|
27
|
-
connection = Denko::Connection::Serial.new
|
28
|
-
# connection = Denko::Connection::Serial.new(device: "/dev/ttyACM0")
|
29
|
-
board = Denko::Board.new(connection)
|
30
|
-
|
31
|
-
#
|
32
|
-
# Infrared can be used on most pins for most boards, but there might be conflicts
|
33
|
-
# with other hardware or libraries. Try different pins. For more info:
|
34
|
-
# https://github.com/Arduino-IRremote/Arduino-IRremote?#timer-and-pin-usage
|
35
|
-
#
|
36
|
-
ir = Denko::PulseIO::IROutput.new(board: board, pin: PIN)
|
37
|
-
|
38
|
-
# NEC Raw-Data=0xF708FB04. LSBFIRST, so the binary for each hex digit below is backward.
|
39
|
-
code = [ 9000, 4500, # Start bit
|
40
|
-
560, 560, 560, 560, 560, 1690, 560, 560, # 0010 0x4 command
|
41
|
-
560, 560, 560, 560, 560, 560, 560, 560, # 0000 0x0 command
|
42
|
-
560, 1690, 560, 1690, 560,560, 560, 1690, # 1101 0xB command inverted
|
43
|
-
560, 1690, 560, 1690, 560, 1690, 560, 1690, # 1111 0xF command inverted
|
44
|
-
560, 560, 560, 560, 560, 560, 560, 1690, # 0001 0x8 address
|
45
|
-
560, 560, 560, 560, 560, 560, 560, 560, # 0000 0x0 address
|
46
|
-
560, 1690, 560, 1690, 560, 1690, 560, 560, # 1110 0x7 address inverted
|
47
|
-
560, 1690, 560, 1690, 560, 1690, 560, 1690, # 1111 0xF address inverted
|
48
|
-
560] # Stop bit
|
49
|
-
|
50
|
-
ir.write(code)
|
51
|
-
board.finish_write
|
@@ -1,30 +0,0 @@
|
|
1
|
-
#
|
2
|
-
# PWM (pulse width modulation) output demo.
|
3
|
-
# Frequency and resolution are configurable (only on ESP32 and PiBoard/Linux for now).
|
4
|
-
# Capture output with logic analyzer or oscilloscope to verify accuracy.
|
5
|
-
#
|
6
|
-
require 'bundler/setup'
|
7
|
-
require 'denko'
|
8
|
-
|
9
|
-
PIN = 2
|
10
|
-
|
11
|
-
board = Denko::Board.new(Denko::Connection::Serial.new)
|
12
|
-
pwm = Denko::PulseIO::PWMOutput.new(board: board, pin: PIN)
|
13
|
-
|
14
|
-
# Resolution test: ~1% duty at 1 kHz / 10-bit.
|
15
|
-
# On and off approx. 10us and 990us respectively.
|
16
|
-
pwm.pwm_enable(frequency: 1_000, resolution: 10)
|
17
|
-
pwm.write 10 # of 1023
|
18
|
-
sleep 0.5
|
19
|
-
pwm.digital_write 0
|
20
|
-
|
21
|
-
sleep 0.5
|
22
|
-
|
23
|
-
# Frequency test: ~50% duty at 10 kHz / 8-bit.
|
24
|
-
# On and off both approx. 50us.
|
25
|
-
pwm.pwm_enable(frequency: 10_000, resolution: 8)
|
26
|
-
pwm.write 127 # of 255
|
27
|
-
sleep 0.5
|
28
|
-
pwm.digital_write 0
|
29
|
-
|
30
|
-
board.finish_write
|
data/examples/rtc/ds3231.rb
DELETED
@@ -1,31 +0,0 @@
|
|
1
|
-
#
|
2
|
-
# D3231 real-time-clock over I2C. Set time and read back every 5 seconds.
|
3
|
-
#
|
4
|
-
require 'bundler/setup'
|
5
|
-
require 'denko'
|
6
|
-
|
7
|
-
board = Denko::Board.new(Denko::Connection::Serial.new)
|
8
|
-
i2c = Denko::I2C::Bus.new(board: board) # address: 0x68 default
|
9
|
-
|
10
|
-
# Tell the bus to search for devices.
|
11
|
-
i2c.search
|
12
|
-
|
13
|
-
if i2c.found_devices.empty?
|
14
|
-
puts "No I2C devices connected!"
|
15
|
-
return
|
16
|
-
end
|
17
|
-
|
18
|
-
# 0x68 is the I2C address for most real time clocks.
|
19
|
-
unless (i2c.found_devices.include? 0x68)
|
20
|
-
puts "DS3231 real time clock not found!"
|
21
|
-
return
|
22
|
-
end
|
23
|
-
|
24
|
-
puts "Using DS3231 RTC at address 0x68"; puts
|
25
|
-
rtc = Denko::RTC::DS3231.new(bus: i2c, address: 0x68)
|
26
|
-
rtc.time = Time.now
|
27
|
-
|
28
|
-
5.times do
|
29
|
-
puts rtc.time
|
30
|
-
sleep 5
|
31
|
-
end
|
data/examples/sensor/aht10.rb
DELETED
@@ -1,17 +0,0 @@
|
|
1
|
-
#
|
2
|
-
# AHT10 sensor over I2C, for temperature and humidity.
|
3
|
-
#
|
4
|
-
require 'bundler/setup'
|
5
|
-
require 'denko'
|
6
|
-
require_relative 'neat_tph_readings'
|
7
|
-
|
8
|
-
board = Denko::Board.new(Denko::Connection::Serial.new)
|
9
|
-
bus = Denko::I2C::Bus.new(board: board)
|
10
|
-
sensor = Denko::Sensor::AHT10.new(bus: bus) # address: 0x38 default
|
11
|
-
|
12
|
-
# Poll it and print readings.
|
13
|
-
sensor.poll(5) do |reading|
|
14
|
-
print_tph_reading(reading)
|
15
|
-
end
|
16
|
-
|
17
|
-
sleep
|
data/examples/sensor/aht20.rb
DELETED
@@ -1,17 +0,0 @@
|
|
1
|
-
#
|
2
|
-
# AHT21 sensor over I2C, for temperature and humidity.
|
3
|
-
#
|
4
|
-
require 'bundler/setup'
|
5
|
-
require 'denko'
|
6
|
-
require_relative 'neat_tph_readings'
|
7
|
-
|
8
|
-
board = Denko::Board.new(Denko::Connection::Serial.new)
|
9
|
-
bus = Denko::I2C::Bus.new(board: board)
|
10
|
-
sensor = Denko::Sensor::AHT20.new(bus: bus) # address: 0x38 default
|
11
|
-
|
12
|
-
# Poll it and print readings.
|
13
|
-
sensor.poll(5) do |reading|
|
14
|
-
print_tph_reading(reading)
|
15
|
-
end
|
16
|
-
|
17
|
-
sleep
|
data/examples/sensor/bme280.rb
DELETED
@@ -1,38 +0,0 @@
|
|
1
|
-
#
|
2
|
-
# BME280 sensor over I2C, for temperature, pressure and humidity.
|
3
|
-
#
|
4
|
-
require 'bundler/setup'
|
5
|
-
require 'denko'
|
6
|
-
require_relative 'neat_tph_readings'
|
7
|
-
|
8
|
-
board = Denko::Board.new(Denko::Connection::Serial.new)
|
9
|
-
bus = Denko::I2C::Bus.new(board: board)
|
10
|
-
|
11
|
-
sensor = Denko::Sensor::BME280.new(bus: bus) # address: 0x76 default
|
12
|
-
# Use A BMP280 with no humidity instead.
|
13
|
-
# sensor = Denko::Sensor::BMP280.new(bus: bus) # address: 0x76 default
|
14
|
-
|
15
|
-
# Default reading mode is oneshot ("forced" in datasheet).
|
16
|
-
# sensor.oneshot_mode
|
17
|
-
|
18
|
-
# Enable oversampling independently on each sensor.
|
19
|
-
# sensor.temperature_samples = 8
|
20
|
-
# sensor.pressure_samples = 2
|
21
|
-
# sensor.humidity_samples = 4
|
22
|
-
|
23
|
-
# Enable continuous reading mode ("normal" in datasheet), with standby time and IIR filter.
|
24
|
-
# sensor.continuous_mode
|
25
|
-
# sensor.standby_time = 62.5
|
26
|
-
# sensor.iir_coefficient = 4
|
27
|
-
|
28
|
-
# Print raw config register bits.
|
29
|
-
# print sensor.config_register_bits
|
30
|
-
|
31
|
-
# Get the shared #print_tph_reading method to print readings neatly.
|
32
|
-
|
33
|
-
# Poll it and print readings.
|
34
|
-
sensor.poll(5) do |reading|
|
35
|
-
print_tph_reading(reading)
|
36
|
-
end
|
37
|
-
|
38
|
-
sleep
|
data/examples/sensor/bmp180.rb
DELETED
@@ -1,26 +0,0 @@
|
|
1
|
-
#
|
2
|
-
# BMP180 sensor over I2C, for temperature and pressure.
|
3
|
-
#
|
4
|
-
require 'bundler/setup'
|
5
|
-
require 'denko'
|
6
|
-
require_relative 'neat_tph_readings'
|
7
|
-
|
8
|
-
board = Denko::Board.new(Denko::Connection::Serial.new)
|
9
|
-
bus = Denko::I2C::Bus.new(board: board)
|
10
|
-
sensor = Denko::Sensor::BMP180.new(bus: bus) # address: 0x77 default
|
11
|
-
|
12
|
-
# Enable oversampling for the pressure sensor only (1,2,4, 8).
|
13
|
-
# sensor.pressure_samples = 8
|
14
|
-
|
15
|
-
# Demonstrate helper methods
|
16
|
-
result = sensor.read
|
17
|
-
puts "Temperature unit helpers: #{sensor.temperature} \xC2\xB0C | #{sensor.temperature_f} \xC2\xB0F | #{sensor.temperature_k} K"
|
18
|
-
puts "Pressure unit helpers: #{sensor.pressure} Pa | #{sensor.pressure_atm.round(6)} atm | #{sensor.pressure_bar.round(6)} bar"
|
19
|
-
puts
|
20
|
-
|
21
|
-
# Poll it and print readings.
|
22
|
-
sensor.poll(5) do |reading|
|
23
|
-
print_tph_reading(reading)
|
24
|
-
end
|
25
|
-
|
26
|
-
sleep
|
data/examples/sensor/dht.rb
DELETED
@@ -1,29 +0,0 @@
|
|
1
|
-
#
|
2
|
-
# DHT sensor class for DHT 11 and DHT 22 sensors.
|
3
|
-
#
|
4
|
-
require 'bundler/setup'
|
5
|
-
require 'denko'
|
6
|
-
require_relative 'neat_tph_readings'
|
7
|
-
|
8
|
-
PIN = 5
|
9
|
-
|
10
|
-
board = Denko::Board.new(Denko::Connection::Serial.new)
|
11
|
-
sensor = Denko::Sensor::DHT.new(board: board, pin: PIN)
|
12
|
-
|
13
|
-
sensor.read
|
14
|
-
if sensor.temperature
|
15
|
-
puts "Temperature unit helpers: #{sensor.temperature} \xC2\xB0C | #{sensor.temperature_f} \xC2\xB0F | #{sensor.temperature_k} K"; puts
|
16
|
-
else
|
17
|
-
puts "ERROR: Sensor not connected... Quitting..."
|
18
|
-
return
|
19
|
-
end
|
20
|
-
|
21
|
-
# Don't try to read it again too quickly.
|
22
|
-
sleep(1)
|
23
|
-
|
24
|
-
# Poll it and print readings.
|
25
|
-
sensor.poll(5) do |reading|
|
26
|
-
print_tph_reading(reading)
|
27
|
-
end
|
28
|
-
|
29
|
-
sleep
|
data/examples/sensor/ds18b20.rb
DELETED
@@ -1,57 +0,0 @@
|
|
1
|
-
#
|
2
|
-
# Example of how to use the Dallas DS18B20 temperature sensor.
|
3
|
-
#
|
4
|
-
require 'bundler/setup'
|
5
|
-
require 'denko'
|
6
|
-
|
7
|
-
PIN = 4
|
8
|
-
|
9
|
-
board = Denko::Board.new(Denko::Connection::Serial.new)
|
10
|
-
bus = Denko::OneWire::Bus.new(board: board, pin: PIN)
|
11
|
-
|
12
|
-
unless bus.device_present?
|
13
|
-
puts "No devices present on bus... Quitting..."
|
14
|
-
return
|
15
|
-
end
|
16
|
-
|
17
|
-
if bus.parasite_power
|
18
|
-
puts "Parasite power detected..."; puts
|
19
|
-
end
|
20
|
-
|
21
|
-
# Search the bus and use results to set up DS18B20 instances.
|
22
|
-
bus.search
|
23
|
-
ds18b20s = []
|
24
|
-
bus.found_devices.each do |d|
|
25
|
-
if d[:class] == Denko::Sensor::DS18B20
|
26
|
-
ds18b20s << d[:class].new(bus: bus, address: d[:address])
|
27
|
-
end
|
28
|
-
end
|
29
|
-
|
30
|
-
if ds18b20s.empty?
|
31
|
-
puts "No DS18B20 sensors found on the bus... Quitting...";
|
32
|
-
else
|
33
|
-
puts "Found DS18B20 sensors with these serials:"
|
34
|
-
puts ds18b20s.map { |d| d.serial_number }
|
35
|
-
puts
|
36
|
-
end
|
37
|
-
|
38
|
-
# Format a reading for printing on a line.
|
39
|
-
def print_reading(reading, sensor)
|
40
|
-
print "#{Time.now.strftime '%Y-%m-%d %H:%M:%S'} - "
|
41
|
-
print "Serial(HEX): #{sensor.serial_number} | Res: #{sensor.resolution} bits | "
|
42
|
-
|
43
|
-
if reading[:crc_error]
|
44
|
-
puts "CRC check failed for this reading!"
|
45
|
-
else
|
46
|
-
fahrenheit = (reading[:temperature] * 1.8 + 32).round(1)
|
47
|
-
puts "#{reading[:temperature]} \xC2\xB0C | #{fahrenheit} \xC2\xB0F"
|
48
|
-
end
|
49
|
-
end
|
50
|
-
|
51
|
-
ds18b20s.each do |sensor|
|
52
|
-
sensor.poll(5) do |reading|
|
53
|
-
print_reading(reading, sensor)
|
54
|
-
end
|
55
|
-
end
|
56
|
-
|
57
|
-
sleep
|