tinderfridge 0.9.0 → 0.12.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/lib/tinderfridge/device.rb +2 -1
- data/lib/tinderfridge/device_info.txt +3 -0
- data/lib/tinderfridge/devices/brick_esp32/brick_esp32.json +11 -0
- data/lib/tinderfridge/devices/brick_esp32/brick_esp32.rb +13 -0
- data/lib/tinderfridge/devices/brick_esp32_ethernet/brick_esp32_ethernet.json +11 -0
- data/lib/tinderfridge/devices/brick_esp32_ethernet/brick_esp32_ethernet.rb +13 -0
- data/lib/tinderfridge/devices/brick_hat/brick_hat.rb +12 -0
- data/lib/tinderfridge/devices/brick_hat_zero/brick_hat_zero.rb +10 -0
- data/lib/tinderfridge/devices/bricklet_air_quality/bricklet_air_quality.rb +15 -0
- data/lib/tinderfridge/devices/bricklet_analog_in_v3/bricklet_analog_in_v3.json +2 -1
- data/lib/tinderfridge/devices/bricklet_barometer_v2/bricklet_barometer_v2.rb +30 -0
- data/lib/tinderfridge/devices/bricklet_co2_v2/bricklet_co2_v2.rb +10 -0
- data/lib/tinderfridge/devices/bricklet_distance_us_v2/bricklet_distance_us_v2.json +2 -1
- data/lib/tinderfridge/devices/bricklet_dmx/bricklet_dmx.json +2 -1
- data/lib/tinderfridge/devices/bricklet_e_paper_296x128/bricklet_e_paper_296x128.json +2 -1
- data/lib/tinderfridge/devices/bricklet_energy_monitor/bricklet_energy_monitor.json +2 -1
- data/lib/tinderfridge/devices/bricklet_gps_v2/bricklet_gps_v2.json +1 -1
- data/lib/tinderfridge/devices/bricklet_gps_v2/bricklet_gps_v2.rb +14 -0
- data/lib/tinderfridge/devices/bricklet_gps_v3/bricklet_gps_v3.json +11 -0
- data/lib/tinderfridge/devices/bricklet_gps_v3/bricklet_gps_v3.rb +58 -0
- data/lib/tinderfridge/devices/bricklet_hall_effect_v2/bricklet_hall_effect_v2.json +2 -1
- data/lib/tinderfridge/devices/bricklet_hall_effect_v2/bricklet_hall_effect_v2.rb +16 -0
- data/lib/tinderfridge/devices/bricklet_humidity_v2/bricklet_humidity_v2.json +2 -1
- data/lib/tinderfridge/devices/bricklet_imu_v3/bricklet_imu_v3.json +2 -1
- data/lib/tinderfridge/devices/bricklet_industrial_dual_relay/bricklet_industrial_dual_relay.json +2 -1
- data/lib/tinderfridge/devices/bricklet_isolator/bricklet_isolator.json +2 -1
- data/lib/tinderfridge/devices/bricklet_joystick_v2/bricklet_joystick_v2.json +2 -1
- data/lib/tinderfridge/devices/bricklet_laser_range_finder_v2/bricklet_laser_range_finder_v2.json +2 -1
- data/lib/tinderfridge/devices/bricklet_lcd_128x64/bricklet_lcd_128x64.json +2 -1
- data/lib/tinderfridge/devices/bricklet_lcd_128x64/bricklet_lcd_128x64.rb +83 -0
- data/lib/tinderfridge/devices/bricklet_linear_poti_v2/bricklet_linear_poti_v2.json +2 -1
- data/lib/tinderfridge/devices/bricklet_motorized_linear_poti/bricklet_motorized_linear_poti.json +2 -1
- data/lib/tinderfridge/devices/bricklet_nfc/bricklet_nfc.json +2 -1
- data/lib/tinderfridge/devices/bricklet_oled_128x64_v2/bricklet_oled_128x64_v2.rb +94 -0
- data/lib/tinderfridge/devices/bricklet_outdoor_weather/bricklet_outdoor_weather.json +2 -1
- data/lib/tinderfridge/devices/bricklet_outdoor_weather/bricklet_outdoor_weather.rb +16 -0
- data/lib/tinderfridge/devices/bricklet_piezo_speaker_v2/bricklet_piezo_speaker_v2.json +2 -1
- data/lib/tinderfridge/devices/bricklet_piezo_speaker_v2/bricklet_piezo_speaker_v2.rb +14 -0
- data/lib/tinderfridge/devices/bricklet_real_time_clock_v2/bricklet_real_time_clock_v2.json +2 -1
- data/lib/tinderfridge/devices/bricklet_rgb_led_button/bricklet_rgb_led_button.json +2 -1
- data/lib/tinderfridge/devices/bricklet_rgb_led_v2/bricklet_rgb_led_v2.json +2 -1
- data/lib/tinderfridge/devices/bricklet_rotary_encoder_v2/bricklet_rotary_encoder_v2.json +2 -1
- data/lib/tinderfridge/devices/bricklet_rotary_poti_v2/bricklet_rotary_poti_v2.json +2 -1
- data/lib/tinderfridge/devices/bricklet_temperature_ir_v2/bricklet_temperature_ir_v2.json +2 -1
- data/lib/tinderfridge/devices/bricklet_temperature_ir_v2/bricklet_temperature_ir_v2.rb +14 -0
- data/lib/tinderfridge/devices/bricklet_temperature_v2/bricklet_temperature_v2.json +2 -1
- data/lib/tinderfridge/devices/bricklet_temperature_v2/bricklet_temperature_v2.rb +27 -0
- data/lib/tinderfridge/devices/bricklet_thermal_imaging/bricklet_thermal_imaging.json +2 -1
- data/lib/tinderfridge/devices/bricklet_thermocouple_v2/bricklet_thermocouple_v2.json +2 -1
- data/lib/tinderfridge/devices/bricklet_uv_light_v2/bricklet_uv_light_v2.json +2 -1
- data/lib/tinderfridge/devices/bricklet_voltage_current_v2/bricklet_voltage_current_v2.json +2 -1
- data/lib/tinderfridge/devices/bricklet_xmc1400_breakout/bricklet_xmc1400_breakout.json +2 -1
- data/lib/tinderfridge/ip_connection.rb +19 -11
- data/lib/tinderfridge/shared/display_ibm437_encoding.rb +41 -0
- data/lib/tinderfridge/tinkerforge.rb +24 -9
- data/lib/tinderfridge/version.rb +1 -1
- metadata +16 -3
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 11aec071db2201e67dee0935c5a37ba2f801d2337cf0dc938ea465a9c0435bd3
|
|
4
|
+
data.tar.gz: ad2faa18ff3320c9320ded930b47f54c38e9471eba0bb52e2aa23cb48da3d108
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 440adf1b54a1787963688f4392fe686e07b898eae1361d3f245526a244f6e677b5a29a7cd84f2f3aa0221ef4300372dcbae18b55200cef2b96d6fa7206a0c7d0
|
|
7
|
+
data.tar.gz: 8204e15a1106392bbde997f2e65704b2cfd176c4e18066685f26e8a50a6cd62e3002b10e8fd6224f16540d946c94c66f66e96f6941b90c7255beec4e4c545a60
|
data/lib/tinderfridge/device.rb
CHANGED
|
@@ -15,6 +15,7 @@ module Tinkerforge
|
|
|
15
15
|
# With help from:
|
|
16
16
|
# - https://stackoverflow.com/questions/2393697
|
|
17
17
|
def descendants
|
|
18
|
+
# NOTE: Ruby 3.1 has Class#subclasses
|
|
18
19
|
ObjectSpace.each_object(Class).select { |klass| klass < self }
|
|
19
20
|
end
|
|
20
21
|
|
|
@@ -79,7 +80,7 @@ module Tinkerforge
|
|
|
79
80
|
|
|
80
81
|
# Returns a programmer-friendly representation of the device.
|
|
81
82
|
def inspect
|
|
82
|
-
"%s (%s@%s:%s)" % [self.class,
|
|
83
|
+
"%s (%s@%s:%s)" % [self.class, uid_string, ipcon.host, ipcon.port]
|
|
83
84
|
end
|
|
84
85
|
|
|
85
86
|
# Returns the device's properties.
|
|
@@ -16,6 +16,8 @@
|
|
|
16
16
|
29 IO-4 Bricklet Tinkerforge::BrickletIO4 bricklet_io4
|
|
17
17
|
111 HAT Brick Tinkerforge::BrickHAT brick_hat
|
|
18
18
|
112 HAT Zero Brick Tinkerforge::BrickHATZero brick_hat_zero
|
|
19
|
+
113 ESP32 Brick Tinkerforge::BrickESP32 brick_esp32
|
|
20
|
+
115 ESP32 Ethernet Brick Tinkerforge::BrickESP32Ethernet brick_esp32_ethernet
|
|
19
21
|
210 Joystick Bricklet Tinkerforge::BrickletJoystick bricklet_joystick
|
|
20
22
|
211 LCD 16x2 Bricklet Tinkerforge::BrickletLCD16x2 bricklet_lcd_16x2
|
|
21
23
|
212 LCD 20x4 Bricklet Tinkerforge::BrickletLCD20x4 bricklet_lcd_20x4
|
|
@@ -142,3 +144,4 @@
|
|
|
142
144
|
2164 Industrial PTC Bricklet Tinkerforge::BrickletIndustrialPTC bricklet_industrial_ptc
|
|
143
145
|
2165 DC Bricklet 2.0 Tinkerforge::BrickletDCV2 bricklet_dc_v2
|
|
144
146
|
2166 Silent Stepper Bricklet 2.0 Tinkerforge::BrickletSilentStepperV2 bricklet_silent_stepper_v2
|
|
147
|
+
2171 GPS Bricklet 3.0 Tinkerforge::BrickletGPSV3 bricklet_gps_v3
|
|
@@ -13,6 +13,18 @@ module Tinkerforge
|
|
|
13
13
|
)
|
|
14
14
|
end
|
|
15
15
|
|
|
16
|
+
private
|
|
17
|
+
|
|
18
|
+
def _view_21x8
|
|
19
|
+
volts = get_voltages
|
|
20
|
+
<<~ET
|
|
21
|
+
HAT #{uid_string.rjust 8}
|
|
22
|
+
|
|
23
|
+
USB #{'%5.2f V' % [volts[0]*0.001]}
|
|
24
|
+
DC #{'%5.2f V' % [volts[1]*0.001]}
|
|
25
|
+
ET
|
|
26
|
+
end
|
|
27
|
+
|
|
16
28
|
end
|
|
17
29
|
|
|
18
30
|
end
|
|
@@ -15,6 +15,21 @@ module Tinkerforge
|
|
|
15
15
|
)
|
|
16
16
|
end
|
|
17
17
|
|
|
18
|
+
# Returns the derived air pressure at sea level.
|
|
19
|
+
#
|
|
20
|
+
# Air pressure is derived from:
|
|
21
|
+
# - air pressure as measured by the Bricklet itself
|
|
22
|
+
# - temperature as measured by the Bricklet itself
|
|
23
|
+
# - altitude of the Bricklet's location (meter)
|
|
24
|
+
#
|
|
25
|
+
# With help from:
|
|
26
|
+
# - https://www.tinkerforge.com/en/doc/Hardware/Bricklets/Barometer_V2.html
|
|
27
|
+
# - https://keisan.casio.com/exec/system/1224575267
|
|
28
|
+
def qff(altitude)
|
|
29
|
+
# QFE / [1 - Tg * H / (273.15 + Tfe + Tg * H)] ^ (0.034163 / Tg)
|
|
30
|
+
(get_air_pressure / (1 - 0.0065 * altitude / (273.15 + (get_temperature * 0.01) + 0.0065 * altitude)) ** (0.034163 / 0.0065)).round
|
|
31
|
+
end
|
|
32
|
+
|
|
18
33
|
end
|
|
19
34
|
|
|
20
35
|
end
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
module Tinkerforge
|
|
2
|
+
|
|
3
|
+
class BrickletBarometerV2
|
|
4
|
+
|
|
5
|
+
# Returns the device's state.
|
|
6
|
+
def state
|
|
7
|
+
super.merge(
|
|
8
|
+
'air_pressure' => get_air_pressure,
|
|
9
|
+
'calibration' => get_calibration,
|
|
10
|
+
'altitude' => get_altitude,
|
|
11
|
+
'reference_air_pressure' => get_reference_air_pressure,
|
|
12
|
+
'temperature' => get_temperature,
|
|
13
|
+
'moving_average_configuration' => get_moving_average_configuration,
|
|
14
|
+
'sensor_configuration' => get_sensor_configuration,
|
|
15
|
+
)
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
private
|
|
19
|
+
|
|
20
|
+
def _view_21x8
|
|
21
|
+
<<~ET
|
|
22
|
+
Baro #{uid_string.rjust 8}
|
|
23
|
+
|
|
24
|
+
#{'%7.2f hPa' % [get_air_pressure*0.001]}
|
|
25
|
+
ET
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
end
|
|
@@ -39,6 +39,20 @@ module Tinkerforge
|
|
|
39
39
|
Time.gm *dt.map(&:to_i)
|
|
40
40
|
end
|
|
41
41
|
|
|
42
|
+
# Returns a URL for viewing the current coordinates on OpenStreetMap.
|
|
43
|
+
def openstreetmap_marker_url(zoom=12)
|
|
44
|
+
if c = coordinates
|
|
45
|
+
"https://www.openstreetmap.org/?mlat=%f&mlon=%f&zoom=%d" % [c, zoom].flatten
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
private
|
|
50
|
+
|
|
51
|
+
def _view_21x8
|
|
52
|
+
"GPSv2 #{uid_string.rjust 8}\n\n" +
|
|
53
|
+
((c = coordinates) ? (" Lat %10.5f\n Lon %10.5f" % c) : ' no fix')
|
|
54
|
+
end
|
|
55
|
+
|
|
42
56
|
end
|
|
43
57
|
|
|
44
58
|
end
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
module Tinkerforge
|
|
2
|
+
|
|
3
|
+
class BrickletGPSV3
|
|
4
|
+
|
|
5
|
+
# Returns the device's state.
|
|
6
|
+
def state
|
|
7
|
+
super.merge(
|
|
8
|
+
'fix_led_config' => get_fix_led_config,
|
|
9
|
+
'fix' => fix?,
|
|
10
|
+
)
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
# Returns true if a fix is available.
|
|
14
|
+
def fix?
|
|
15
|
+
get_status[0]
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
# Returns latitude and longitude as reported by the GPS Bricklet.
|
|
19
|
+
#
|
|
20
|
+
# Nil when there is no fix (position not determined).
|
|
21
|
+
def coordinates
|
|
22
|
+
if fix?
|
|
23
|
+
c = get_coordinates
|
|
24
|
+
[
|
|
25
|
+
c[0] / (c[1] == 'N' ? 1000000.0 : -1000000.0),
|
|
26
|
+
c[2] / (c[3] == 'E' ? 1000000.0 : -1000000.0)
|
|
27
|
+
]
|
|
28
|
+
else
|
|
29
|
+
nil
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
# Returns a Time object representing the time as reported by the GPS Bricklet.
|
|
34
|
+
def time
|
|
35
|
+
# FIXME: This will not work after 31-Dec-2099.
|
|
36
|
+
dt = get_date_time.map &:to_s
|
|
37
|
+
dt = dt[0].rjust(6,'0').unpack('a2a2a2').reverse + dt[1].rjust(9,'0').concat('000').unpack('a2a2a2a6')
|
|
38
|
+
dt[0].prepend '20'
|
|
39
|
+
Time.gm *dt.map(&:to_i)
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
# Returns a URL for viewing the current coordinates on OpenStreetMap.
|
|
43
|
+
def openstreetmap_marker_url(zoom=12)
|
|
44
|
+
if c = coordinates
|
|
45
|
+
"https://www.openstreetmap.org/?mlat=%f&mlon=%f&zoom=%d" % [c, zoom].flatten
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
private
|
|
50
|
+
|
|
51
|
+
def _view_21x8
|
|
52
|
+
"GPSv3 #{uid_string.rjust 8}\n\n" +
|
|
53
|
+
((c = coordinates) ? (" Lat %10.5f\n Lon %10.5f" % c) : ' no fix')
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
end
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
module Tinkerforge
|
|
2
|
+
|
|
3
|
+
class BrickletHallEffectV2
|
|
4
|
+
|
|
5
|
+
# Returns the device's state.
|
|
6
|
+
def state
|
|
7
|
+
super.merge(
|
|
8
|
+
'magnetic_flux_density' => get_magnetic_flux_density,
|
|
9
|
+
'counter' => get_counter(false),
|
|
10
|
+
'counter_config' => get_counter_config,
|
|
11
|
+
)
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
end
|
data/lib/tinderfridge/devices/bricklet_industrial_dual_relay/bricklet_industrial_dual_relay.json
CHANGED
|
@@ -6,5 +6,6 @@
|
|
|
6
6
|
],
|
|
7
7
|
"weight": 29.4,
|
|
8
8
|
"documentation_en_url": "https://www.tinkerforge.com/en/doc/Hardware/Bricklets/Industrial_Dual_Relay.html",
|
|
9
|
-
"versions_identifier": "bricklets:industrial_dual_relay"
|
|
9
|
+
"versions_identifier": "bricklets:industrial_dual_relay",
|
|
10
|
+
"released": "2018-06-07"
|
|
10
11
|
}
|
data/lib/tinderfridge/devices/bricklet_laser_range_finder_v2/bricklet_laser_range_finder_v2.json
CHANGED
|
@@ -6,5 +6,6 @@
|
|
|
6
6
|
],
|
|
7
7
|
"weight": 30,
|
|
8
8
|
"documentation_en_url": "https://www.tinkerforge.com/en/doc/Hardware/Bricklets/Laser_Range_Finder_V2.html",
|
|
9
|
-
"versions_identifier": "bricklets:laser_range_finder_v2"
|
|
9
|
+
"versions_identifier": "bricklets:laser_range_finder_v2",
|
|
10
|
+
"released": "2019-05-20"
|
|
10
11
|
}
|
|
@@ -1,7 +1,21 @@
|
|
|
1
|
+
require 'tinderfridge/shared/display_ibm437_encoding'
|
|
2
|
+
|
|
1
3
|
module Tinkerforge
|
|
2
4
|
|
|
3
5
|
class BrickletLCD128x64
|
|
4
6
|
|
|
7
|
+
include Tinkerforge::Shared::IBM437_encoding
|
|
8
|
+
|
|
9
|
+
# Encodes a string in the IBM437 character set used by some displays.
|
|
10
|
+
#
|
|
11
|
+
# Characters that can not be encoded are replaced with '?'.
|
|
12
|
+
#
|
|
13
|
+
# See:
|
|
14
|
+
# - https://en.wikipedia.org/wiki/Code_page_437
|
|
15
|
+
def encode(string)
|
|
16
|
+
ibm437_encode(string)
|
|
17
|
+
end
|
|
18
|
+
|
|
5
19
|
# Returns the current setting for the backlight (0..100).
|
|
6
20
|
def backlight
|
|
7
21
|
get_display_configuration[1]
|
|
@@ -20,12 +34,81 @@ module Tinkerforge
|
|
|
20
34
|
true
|
|
21
35
|
end
|
|
22
36
|
|
|
37
|
+
# Returns the current contrast setting (0..63).
|
|
38
|
+
def contrast
|
|
39
|
+
get_display_configuration[0]
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
# Sets the contrast (0..63).
|
|
43
|
+
def contrast=(value)
|
|
44
|
+
state = get_display_configuration
|
|
45
|
+
state[0] = value.to_i
|
|
46
|
+
set_display_configuration *state
|
|
47
|
+
end
|
|
48
|
+
|
|
23
49
|
# Clears the display, including the GUI.
|
|
24
50
|
def clear
|
|
25
51
|
clear_display
|
|
26
52
|
remove_all_gui
|
|
27
53
|
end
|
|
28
54
|
|
|
55
|
+
# Returns true if automatic draw is set to false.
|
|
56
|
+
def buffered?
|
|
57
|
+
! get_display_configuration[3]
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
# Draws the currently buffered frame.
|
|
61
|
+
def redraw(force_complete_redraw=false)
|
|
62
|
+
draw_buffered_frame force_complete_redraw
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
alias flush redraw
|
|
66
|
+
|
|
67
|
+
# Returns the device's state.
|
|
68
|
+
def state
|
|
69
|
+
super.merge(
|
|
70
|
+
'touch_led_config' => get_touch_led_config,
|
|
71
|
+
'display_configuration' => get_display_configuration,
|
|
72
|
+
)
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
# Clears the display and prints upto 8 lines of text.
|
|
76
|
+
#
|
|
77
|
+
# Text may contain newline characters to separate lines.
|
|
78
|
+
# Lines longer than 21 characters will be wrapped.
|
|
79
|
+
#
|
|
80
|
+
# Text is automatically encoded in the IBM437 character set.
|
|
81
|
+
# @example
|
|
82
|
+
# my_lcd.put_screen "Hello, World!\n\nRuby #{RUBY_VERSION}"
|
|
83
|
+
def put_screen(text='', test: false)
|
|
84
|
+
lines = text.split("\n")
|
|
85
|
+
lines = lines.map { |s| s.empty? ? '' : s.scan(/.{1,21}/) }.flatten
|
|
86
|
+
lines = lines[0,8].map { |l| encode l }
|
|
87
|
+
|
|
88
|
+
return lines if test
|
|
89
|
+
|
|
90
|
+
clear
|
|
91
|
+
lines.each_with_index do |s,l|
|
|
92
|
+
write_line l, 0, s
|
|
93
|
+
end
|
|
94
|
+
nil
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
# Shows an object.
|
|
98
|
+
def show(object)
|
|
99
|
+
if object.respond_to?( :_view_21x8, true)
|
|
100
|
+
put_screen ( object.send(:_view_21x8) rescue "21x8 view error\n\n#{object.class.to_s}" )
|
|
101
|
+
elsif
|
|
102
|
+
put_screen object.inspect[0,168]
|
|
103
|
+
end
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
private
|
|
107
|
+
|
|
108
|
+
def _view_21x8
|
|
109
|
+
"LCD #{uid_string.rjust 8}"
|
|
110
|
+
end
|
|
111
|
+
|
|
29
112
|
end
|
|
30
113
|
|
|
31
114
|
end
|
data/lib/tinderfridge/devices/bricklet_motorized_linear_poti/bricklet_motorized_linear_poti.json
CHANGED
|
@@ -6,5 +6,6 @@
|
|
|
6
6
|
],
|
|
7
7
|
"weight": 67,
|
|
8
8
|
"documentation_en_url": "https://www.tinkerforge.com/en/doc/Hardware/Bricklets/Motorized_Linear_Poti.html",
|
|
9
|
-
"versions_identifier": "bricklets:motorized_linear_poti"
|
|
9
|
+
"versions_identifier": "bricklets:motorized_linear_poti",
|
|
10
|
+
"released": "2017-11-17"
|
|
10
11
|
}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
require 'tinderfridge/shared/display_ibm437_encoding'
|
|
2
|
+
|
|
3
|
+
module Tinkerforge
|
|
4
|
+
|
|
5
|
+
class BrickletOLED128x64V2
|
|
6
|
+
|
|
7
|
+
include Tinkerforge::Shared::IBM437_encoding
|
|
8
|
+
|
|
9
|
+
# Encodes a string in the IBM437 character set used by some displays.
|
|
10
|
+
#
|
|
11
|
+
# Characters that can not be encoded are replaced with '?'.
|
|
12
|
+
#
|
|
13
|
+
# See:
|
|
14
|
+
# - https://en.wikipedia.org/wiki/Code_page_437
|
|
15
|
+
def encode(string)
|
|
16
|
+
ibm437_encode(string)
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
# Turns the display all black.
|
|
20
|
+
def blackout
|
|
21
|
+
c = get_display_configuration
|
|
22
|
+
|
|
23
|
+
if c[1] # inverted
|
|
24
|
+
set_display_configuration c[0], false, c[2]
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
clear_display
|
|
28
|
+
|
|
29
|
+
if ! c[2] # buffered
|
|
30
|
+
draw_buffered_frame(true)
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
true
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
# Returns true if automatic draw is set to false.
|
|
37
|
+
def buffered?
|
|
38
|
+
! get_display_configuration[2]
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
# Draws the currently buffered frame.
|
|
42
|
+
def redraw(force_complete_redraw=false)
|
|
43
|
+
draw_buffered_frame force_complete_redraw
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
alias flush redraw
|
|
47
|
+
|
|
48
|
+
# Returns the device's state.
|
|
49
|
+
def state
|
|
50
|
+
super.merge(
|
|
51
|
+
'display_configuration' => get_display_configuration,
|
|
52
|
+
)
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
# Clears the display and prints upto 8 lines of text.
|
|
56
|
+
#
|
|
57
|
+
# Text may contain newline characters to separate lines.
|
|
58
|
+
# Lines longer than 21 characters will be wrapped.
|
|
59
|
+
#
|
|
60
|
+
# Text is automatically encoded in the IBM437 character set.
|
|
61
|
+
# @example
|
|
62
|
+
# my_oled.put_screen "Hello, World!\n\nRuby #{RUBY_VERSION}"
|
|
63
|
+
def put_screen(text='', test: false)
|
|
64
|
+
lines = text.split("\n")
|
|
65
|
+
lines = lines.map { |s| s.empty? ? '' : s.scan(/.{1,21}/) }.flatten
|
|
66
|
+
lines = lines[0,8].map { |l| encode l }
|
|
67
|
+
|
|
68
|
+
return lines if test
|
|
69
|
+
|
|
70
|
+
clear_display
|
|
71
|
+
lines.each_with_index do |s,l|
|
|
72
|
+
write_line l, 0, s
|
|
73
|
+
end
|
|
74
|
+
nil
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
# Shows an object.
|
|
78
|
+
def show(object)
|
|
79
|
+
if object.respond_to?( :_view_21x8, true)
|
|
80
|
+
put_screen ( object.send(:_view_21x8) rescue "21x8 view error\n\n#{object.class.to_s}" )
|
|
81
|
+
elsif
|
|
82
|
+
put_screen object.inspect[0,168]
|
|
83
|
+
end
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
private
|
|
87
|
+
|
|
88
|
+
def _view_21x8
|
|
89
|
+
"OLED #{uid_string.rjust 8}"
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
end
|
|
@@ -2,6 +2,13 @@ module Tinkerforge
|
|
|
2
2
|
|
|
3
3
|
class BrickletOutdoorWeather
|
|
4
4
|
|
|
5
|
+
# Returns the device's state.
|
|
6
|
+
def state
|
|
7
|
+
super.merge(
|
|
8
|
+
'sensor_data' => sensors,
|
|
9
|
+
)
|
|
10
|
+
end
|
|
11
|
+
|
|
5
12
|
# Returns the last measured data for all sensors.
|
|
6
13
|
#
|
|
7
14
|
# The result is a Hash, with sensor identifiers as the keys. Values per sensor are:
|
|
@@ -14,6 +21,15 @@ module Tinkerforge
|
|
|
14
21
|
end.to_h
|
|
15
22
|
end
|
|
16
23
|
|
|
24
|
+
private
|
|
25
|
+
|
|
26
|
+
def _view_21x8
|
|
27
|
+
"Weather #{uid_string.rjust 8}\n\n" +
|
|
28
|
+
sensors.first(6).map do |k,v|
|
|
29
|
+
%Q(#{v[2] > 100 ? '?' : ' '} %3d %4.1f °C %2d %%\n) % [k,v].flatten
|
|
30
|
+
end.join
|
|
31
|
+
end
|
|
32
|
+
|
|
17
33
|
end
|
|
18
34
|
|
|
19
35
|
end
|
|
@@ -6,5 +6,6 @@
|
|
|
6
6
|
],
|
|
7
7
|
"weight": 3,
|
|
8
8
|
"documentation_en_url": "https://www.tinkerforge.com/en/doc/Hardware/Bricklets/RealTime_Clock_V2.html",
|
|
9
|
-
"versions_identifier": "bricklets:real_time_clock_v2"
|
|
9
|
+
"versions_identifier": "bricklets:real_time_clock_v2",
|
|
10
|
+
"released": "2018-06-07"
|
|
10
11
|
}
|
|
@@ -6,5 +6,6 @@
|
|
|
6
6
|
],
|
|
7
7
|
"weight": 6,
|
|
8
8
|
"documentation_en_url": "https://www.tinkerforge.com/en/doc/Hardware/Bricklets/Rotary_Encoder_V2.html",
|
|
9
|
-
"versions_identifier": "bricklets:rotary_encoder_v2"
|
|
9
|
+
"versions_identifier": "bricklets:rotary_encoder_v2",
|
|
10
|
+
"released": "2018-02-26"
|
|
10
11
|
}
|
|
@@ -6,5 +6,6 @@
|
|
|
6
6
|
],
|
|
7
7
|
"weight": 3,
|
|
8
8
|
"documentation_en_url": "https://www.tinkerforge.com/en/doc/Hardware/Bricklets/Temperature_IR_V2.html",
|
|
9
|
-
"versions_identifier": "bricklets:temperature_ir_v2"
|
|
9
|
+
"versions_identifier": "bricklets:temperature_ir_v2",
|
|
10
|
+
"released": "2018-02-26"
|
|
10
11
|
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
module Tinkerforge
|
|
2
|
+
|
|
3
|
+
class BrickletTemperatureV2
|
|
4
|
+
|
|
5
|
+
# Returns the device's state.
|
|
6
|
+
def state
|
|
7
|
+
super.merge(
|
|
8
|
+
'temperature' => get_temperature,
|
|
9
|
+
'heater_configuration' => get_heater_configuration,
|
|
10
|
+
)
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
private
|
|
14
|
+
|
|
15
|
+
def _view_21x8
|
|
16
|
+
<<~ET
|
|
17
|
+
Temp #{uid_string.rjust 8}
|
|
18
|
+
|
|
19
|
+
#{'%6.2f °C' % [get_temperature*0.01]}
|
|
20
|
+
|
|
21
|
+
#{get_heater_configuration == 1 ? 'HEATER' : ''}
|
|
22
|
+
ET
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
end
|
|
@@ -6,5 +6,6 @@
|
|
|
6
6
|
],
|
|
7
7
|
"weight": 10,
|
|
8
8
|
"documentation_en_url": "https://www.tinkerforge.com/en/doc/Hardware/Bricklets/Voltage_Current_V2.html",
|
|
9
|
-
"versions_identifier": "bricklets:voltage_current_v2"
|
|
9
|
+
"versions_identifier": "bricklets:voltage_current_v2",
|
|
10
|
+
"released": "2018-06-07"
|
|
10
11
|
}
|
|
@@ -10,6 +10,9 @@ module Tinkerforge
|
|
|
10
10
|
# Returns the port for the IP Connection.
|
|
11
11
|
attr_reader :port
|
|
12
12
|
|
|
13
|
+
# Returns the network socket used by the IP Connection.
|
|
14
|
+
attr_reader :socket
|
|
15
|
+
|
|
13
16
|
# Returns a programmer-friendly representation of the object.
|
|
14
17
|
def inspect
|
|
15
18
|
"%s (%s:%s)" % [self.class, host, port]
|
|
@@ -117,17 +120,22 @@ module Tinkerforge
|
|
|
117
120
|
|
|
118
121
|
end
|
|
119
122
|
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
123
|
+
|
|
124
|
+
class << self
|
|
125
|
+
|
|
126
|
+
# Creates an IP Connection object connected to the given host and port.
|
|
127
|
+
#
|
|
128
|
+
# If no host and port are specified, uses the TINKERFORGE_HOST and TINKERFORGE_PORT environment variables, when defined.
|
|
129
|
+
# Otherwise defaults to 'localhost' and port 4223.
|
|
130
|
+
def connect(host=nil, port=nil)
|
|
131
|
+
ipcon = IPConnection.new
|
|
132
|
+
ipcon.connect(
|
|
133
|
+
( host || ENV['TINKERFORGE_HOST'] || 'localhost' ),
|
|
134
|
+
( port || ENV['TINKERFORGE_PORT'] || 4223 )
|
|
135
|
+
)
|
|
136
|
+
ipcon
|
|
137
|
+
end
|
|
138
|
+
|
|
131
139
|
end
|
|
132
140
|
|
|
133
141
|
end
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
module Tinkerforge
|
|
2
|
+
|
|
3
|
+
module Shared
|
|
4
|
+
|
|
5
|
+
module IBM437_encoding
|
|
6
|
+
|
|
7
|
+
private
|
|
8
|
+
|
|
9
|
+
# Encodes a string in the IBM437 character set used by some displays.
|
|
10
|
+
#
|
|
11
|
+
# Characters that can not be encoded are replaced with '?'.
|
|
12
|
+
#
|
|
13
|
+
# See:
|
|
14
|
+
# - https://en.wikipedia.org/wiki/Code_page_437
|
|
15
|
+
def ibm437_encode(string)
|
|
16
|
+
string.encode('IBM437', fallback: ibm437_encoding_fallback_table)
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
# Ruby's IBM437 encoding does not include codepoints 0..31 and 127.
|
|
20
|
+
# This fallback table defines those, minus 0,
|
|
21
|
+
# and defines '?' as default for undefined characters.
|
|
22
|
+
def ibm437_encoding_fallback_table
|
|
23
|
+
@@ibm437_encoding_fallback_table ||= Hash.new('?').merge(
|
|
24
|
+
{
|
|
25
|
+
'☺'=> "\x01", '☻'=> "\x02", '♥'=> "\x03", '♦'=> "\x04",
|
|
26
|
+
'♣'=> "\x05", '♠'=> "\x06", '•'=> "\x07", '◘'=> "\x08",
|
|
27
|
+
'○'=> "\x09", '◙'=> "\x0a", '♂'=> "\x0b", '♀'=> "\x0c",
|
|
28
|
+
'♪'=> "\x0d", '♫'=> "\x0e", '☼'=> "\x0f", '►'=> "\x10",
|
|
29
|
+
'◄'=> "\x11", '↕'=> "\x12", '‼'=> "\x13", '¶'=> "\x14",
|
|
30
|
+
'§'=> "\x15", '▬'=> "\x16", '↨'=> "\x17", '↑'=> "\x18",
|
|
31
|
+
'↓'=> "\x19", '→'=> "\x1a", '←'=> "\x1b", '∟'=> "\x1c",
|
|
32
|
+
'↔'=> "\x1d", '▲'=> "\x1e", '▼'=> "\x1f", '⌂'=> "\x7f"
|
|
33
|
+
}
|
|
34
|
+
)
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
end
|
|
@@ -5,16 +5,31 @@ module Tinkerforge
|
|
|
5
5
|
ALL_VERSIONS_URL = 'https://download.tinkerforge.com/all_versions.txt'
|
|
6
6
|
LATEST_VERSIONS_URL = 'https://download.tinkerforge.com/latest_versions.txt'
|
|
7
7
|
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
8
|
+
class << self
|
|
9
|
+
|
|
10
|
+
# Returns the directory where Tinkerforge bindings appear to be installed.
|
|
11
|
+
def lib_dir
|
|
12
|
+
File.dirname File.dirname Device.instance_method('uid').source_location.first
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
# Attempts to load all files that are part of Tinkerforge. Returns a list of files loaded.
|
|
16
|
+
def require_everything
|
|
17
|
+
Dir.glob(File.join lib_dir, 'tinkerforge', '*.rb').map do |file|
|
|
18
|
+
require(file) ? file : nil
|
|
19
|
+
end.compact
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
# Discovers local devices.
|
|
23
|
+
#
|
|
24
|
+
# Connects to 'localhost', and returns devices discovered there. If no port is specified, defaults to port 4223.
|
|
25
|
+
# @example
|
|
26
|
+
# Tinkerforge.local.ls
|
|
27
|
+
# @example Mac only
|
|
28
|
+
# Tinkerforge.local.doc
|
|
29
|
+
def local(port=4223)
|
|
30
|
+
connect('localhost', port).discover(0.25)
|
|
31
|
+
end
|
|
12
32
|
|
|
13
|
-
# Attempts to load all files that are part of Tinkerforge. Returns a list of files loaded.
|
|
14
|
-
def self.require_everything
|
|
15
|
-
Dir.glob(File.join lib_dir, 'tinkerforge', '*.rb').map do |file|
|
|
16
|
-
require(file) ? file : nil
|
|
17
|
-
end.compact
|
|
18
33
|
end
|
|
19
34
|
|
|
20
35
|
end
|
data/lib/tinderfridge/version.rb
CHANGED
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: tinderfridge
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.12.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- lllist.eu
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2022-
|
|
11
|
+
date: 2022-07-22 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: tinkerforge
|
|
@@ -41,6 +41,10 @@ files:
|
|
|
41
41
|
- lib/tinderfridge/device_collection.rb
|
|
42
42
|
- lib/tinderfridge/device_info.rb
|
|
43
43
|
- lib/tinderfridge/device_info.txt
|
|
44
|
+
- lib/tinderfridge/devices/brick_esp32/brick_esp32.json
|
|
45
|
+
- lib/tinderfridge/devices/brick_esp32/brick_esp32.rb
|
|
46
|
+
- lib/tinderfridge/devices/brick_esp32_ethernet/brick_esp32_ethernet.json
|
|
47
|
+
- lib/tinderfridge/devices/brick_esp32_ethernet/brick_esp32_ethernet.rb
|
|
44
48
|
- lib/tinderfridge/devices/brick_hat/brick_hat.json
|
|
45
49
|
- lib/tinderfridge/devices/brick_hat/brick_hat.rb
|
|
46
50
|
- lib/tinderfridge/devices/brick_hat_zero/brick_hat_zero.json
|
|
@@ -55,6 +59,7 @@ files:
|
|
|
55
59
|
- lib/tinderfridge/devices/bricklet_analog_in_v3/bricklet_analog_in_v3.json
|
|
56
60
|
- lib/tinderfridge/devices/bricklet_analog_out_v3/bricklet_analog_out_v3.json
|
|
57
61
|
- lib/tinderfridge/devices/bricklet_barometer_v2/bricklet_barometer_v2.json
|
|
62
|
+
- lib/tinderfridge/devices/bricklet_barometer_v2/bricklet_barometer_v2.rb
|
|
58
63
|
- lib/tinderfridge/devices/bricklet_can_v2/bricklet_can_v2.json
|
|
59
64
|
- lib/tinderfridge/devices/bricklet_co2_v2/bricklet_co2_v2.json
|
|
60
65
|
- lib/tinderfridge/devices/bricklet_co2_v2/bricklet_co2_v2.rb
|
|
@@ -71,7 +76,10 @@ files:
|
|
|
71
76
|
- lib/tinderfridge/devices/bricklet_energy_monitor/bricklet_energy_monitor.json
|
|
72
77
|
- lib/tinderfridge/devices/bricklet_gps_v2/bricklet_gps_v2.json
|
|
73
78
|
- lib/tinderfridge/devices/bricklet_gps_v2/bricklet_gps_v2.rb
|
|
79
|
+
- lib/tinderfridge/devices/bricklet_gps_v3/bricklet_gps_v3.json
|
|
80
|
+
- lib/tinderfridge/devices/bricklet_gps_v3/bricklet_gps_v3.rb
|
|
74
81
|
- lib/tinderfridge/devices/bricklet_hall_effect_v2/bricklet_hall_effect_v2.json
|
|
82
|
+
- lib/tinderfridge/devices/bricklet_hall_effect_v2/bricklet_hall_effect_v2.rb
|
|
75
83
|
- lib/tinderfridge/devices/bricklet_humidity_v2/bricklet_humidity_v2.json
|
|
76
84
|
- lib/tinderfridge/devices/bricklet_imu_v3/bricklet_imu_v3.json
|
|
77
85
|
- lib/tinderfridge/devices/bricklet_industrial_analog_out_v2/bricklet_industrial_analog_out_v2.json
|
|
@@ -107,12 +115,14 @@ files:
|
|
|
107
115
|
- lib/tinderfridge/devices/bricklet_nfc/bricklet_nfc.json
|
|
108
116
|
- lib/tinderfridge/devices/bricklet_nfc/bricklet_nfc.rb
|
|
109
117
|
- lib/tinderfridge/devices/bricklet_oled_128x64_v2/bricklet_oled_128x64_v2.json
|
|
118
|
+
- lib/tinderfridge/devices/bricklet_oled_128x64_v2/bricklet_oled_128x64_v2.rb
|
|
110
119
|
- lib/tinderfridge/devices/bricklet_one_wire/bricklet_one_wire.json
|
|
111
120
|
- lib/tinderfridge/devices/bricklet_outdoor_weather/bricklet_outdoor_weather.json
|
|
112
121
|
- lib/tinderfridge/devices/bricklet_outdoor_weather/bricklet_outdoor_weather.rb
|
|
113
122
|
- lib/tinderfridge/devices/bricklet_particulate_matter/bricklet_particulate_matter.json
|
|
114
123
|
- lib/tinderfridge/devices/bricklet_performance_dc/bricklet_performance_dc.json
|
|
115
124
|
- lib/tinderfridge/devices/bricklet_piezo_speaker_v2/bricklet_piezo_speaker_v2.json
|
|
125
|
+
- lib/tinderfridge/devices/bricklet_piezo_speaker_v2/bricklet_piezo_speaker_v2.rb
|
|
116
126
|
- lib/tinderfridge/devices/bricklet_ptc_v2/bricklet_ptc_v2.json
|
|
117
127
|
- lib/tinderfridge/devices/bricklet_real_time_clock_v2/bricklet_real_time_clock_v2.json
|
|
118
128
|
- lib/tinderfridge/devices/bricklet_remote_switch_v2/bricklet_remote_switch_v2.json
|
|
@@ -134,7 +144,9 @@ files:
|
|
|
134
144
|
- lib/tinderfridge/devices/bricklet_sound_pressure_level/bricklet_sound_pressure_level.json
|
|
135
145
|
- lib/tinderfridge/devices/bricklet_sound_pressure_level/bricklet_sound_pressure_level.rb
|
|
136
146
|
- lib/tinderfridge/devices/bricklet_temperature_ir_v2/bricklet_temperature_ir_v2.json
|
|
147
|
+
- lib/tinderfridge/devices/bricklet_temperature_ir_v2/bricklet_temperature_ir_v2.rb
|
|
137
148
|
- lib/tinderfridge/devices/bricklet_temperature_v2/bricklet_temperature_v2.json
|
|
149
|
+
- lib/tinderfridge/devices/bricklet_temperature_v2/bricklet_temperature_v2.rb
|
|
138
150
|
- lib/tinderfridge/devices/bricklet_thermal_imaging/bricklet_thermal_imaging.json
|
|
139
151
|
- lib/tinderfridge/devices/bricklet_thermocouple_v2/bricklet_thermocouple_v2.json
|
|
140
152
|
- lib/tinderfridge/devices/bricklet_uv_light_v2/bricklet_uv_light_v2.json
|
|
@@ -142,6 +154,7 @@ files:
|
|
|
142
154
|
- lib/tinderfridge/devices/bricklet_voltage_current_v2/bricklet_voltage_current_v2.rb
|
|
143
155
|
- lib/tinderfridge/devices/bricklet_xmc1400_breakout/bricklet_xmc1400_breakout.json
|
|
144
156
|
- lib/tinderfridge/ip_connection.rb
|
|
157
|
+
- lib/tinderfridge/shared/display_ibm437_encoding.rb
|
|
145
158
|
- lib/tinderfridge/tinkerforge.rb
|
|
146
159
|
- lib/tinderfridge/version.rb
|
|
147
160
|
homepage: https://github.com/lllisteu/tinderfridge
|
|
@@ -166,7 +179,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
166
179
|
- !ruby/object:Gem::Version
|
|
167
180
|
version: '0'
|
|
168
181
|
requirements: []
|
|
169
|
-
rubygems_version: 3.
|
|
182
|
+
rubygems_version: 3.3.11
|
|
170
183
|
signing_key:
|
|
171
184
|
specification_version: 4
|
|
172
185
|
summary: Extending Tinkerforge in fun and useful ways.
|