Skip to content

Commit 4eb6aef

Browse files
committed
Unify pump and sensor code, allow openhub to write to config.json, also get rid of all interrupts! Hurray!
1 parent 52e19c9 commit 4eb6aef

File tree

4 files changed

+61
-44
lines changed

4 files changed

+61
-44
lines changed

AnalogSensor.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,9 @@
55
class AnalogSensor:
66

77
def __init__(self, data):
8-
self.index = data["index"]
8+
self.index = str(data["index"])
99
self.serial_no = data["serial_no"]
10-
self.gpio = data["gpio"]
10+
self.gpio = int(data["gpio"])
1111
self.type = data["type"]
1212
self.window = 10
1313
self.current_size = 0.0

Pump.py

+9-8
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,11 @@
55
class Pump:
66

77
def __init__(self, data):
8-
self.index = data["index"]
8+
self.index = str(data["index"])
99
self.serial_no = data["serial_no"]
10-
self.en = Pin(data["en"], Pin.OUT)
11-
self.gpio0 = Pin(data["gpio0"], Pin.OUT)
12-
self.gpio1 = Pin(data["gpio1"], Pin.OUT)
10+
self.en = Pin(int(data["en"]), Pin.OUT)
11+
self.gpio0 = Pin(int(data["gpio0"]), Pin.OUT)
12+
self.gpio1 = Pin(int(data["gpio1"]), Pin.OUT)
1313
self.gpio0.on()
1414
self.type = data["type"]
1515
self.pwm = PWM(self.en)
@@ -20,10 +20,11 @@ def __init__(self, data):
2020
"state": "off"}
2121

2222
def set_state(self, state):
23-
if state == "on":
24-
self.turn_on()
25-
elif state == "off":
26-
self.turn_off()
23+
if self.state != state:
24+
if state == "on":
25+
self.turn_on()
26+
elif state == "off":
27+
self.turn_off()
2728

2829
return self.response_dict
2930

main.py

+48-34
Original file line numberDiff line numberDiff line change
@@ -1,70 +1,84 @@
11
import utime
22
from machine import ADC, Pin, disable_irq, enable_irq
33
from AnalogSensor import AnalogSensor
4+
from Pump import Pump
45
import ujson
56
import sys
67
import select
78
import micropython
89

910
micropython.alloc_emergency_exception_buf(100)
1011

11-
config = {}
12-
13-
with open("""/config.json""") as data_file:
14-
config = ujson.load(data_file)
15-
16-
serial_no = config["serial_no"]
17-
num_sensors = config["no_channels"]
18-
19-
analog_sensors = {}
20-
21-
for v in config["channels"].values():
22-
analog_sensor = AnalogSensor(v)
23-
analog_sensors[str(analog_sensor.index)] = analog_sensor
24-
2512
led = Pin(25, Pin.OUT)
2613
led.on()
2714

28-
p1 = Pin(5, Pin.IN, pull=Pin.PULL_DOWN)
15+
with open("""/serial_no.json""") as serial_json_file:
16+
serial_json = ujson.load(serial_json_file)
2917

30-
# command = '12345'
31-
# channel = '-1'
18+
serial_no = serial_json["serial_no"]
3219

3320
poll = select.poll()
3421
poll.register(sys.stdin, select.POLLIN)
35-
interrupt = False
3622

23+
config = {}
3724

38-
def interrupt_handler():
39-
global interrupt
40-
led.on()
41-
interrupt = True
4225

26+
def init():
27+
global config, io_components
28+
io_components = {}
4329

44-
# lbo = p1.irq(handler=lambda pin: interrupt_handler(), trigger=Pin.IRQ_RISING)
30+
try:
31+
32+
with open("""/config.json""") as data_file:
33+
config = ujson.load(data_file)
34+
35+
for v in config["channels"]:
36+
if v['type'] == 'sensor':
37+
analog_sensor = AnalogSensor(v)
38+
io_components[str(analog_sensor.index)] = analog_sensor
39+
elif v['type'] == 'pump':
40+
pump = Pump(v)
41+
io_components[str(pump.index)] = pump
42+
except Exception as e:
43+
print(e)
44+
config = {}
45+
46+
return io_components
4547

4648

4749
def loop():
48-
global poll
50+
global poll, io_components, led, serial_no
51+
command = ''
4952
try:
5053
command = str(poll.poll(200)[0][0].read(4))
5154
except Exception as e:
5255
command = ''
5356
finally:
5457
if command == 'data':
5558
channel = str(poll.poll()[0][0].read(1))
56-
print(analog_sensors[channel].response_dict)
57-
if command == 'init':
58-
print(config)
59+
print(io_components[str(channel)].response_dict)
60+
elif command == 'init':
61+
print(serial_no)
62+
new_config = (str(poll.poll()[0][0].readline())).strip()
63+
try:
64+
with open("""/config.json""", 'w') as data_file:
65+
ujson.dump(ujson.loads(new_config), data_file)
66+
except Exception as e:
67+
print(e)
68+
io_components = init()
69+
elif command == 'stat':
70+
channel = str(poll.poll()[0][0].read(1))
71+
state = (str(poll.poll()[0][0].readline())).strip()
72+
print(str(io_components[channel].set_state(state)))
73+
74+
for sensor in io_components.values():
75+
if sensor.type == 'sensor':
76+
sensor.add_value()
77+
sensor.update_response_dict()
78+
led.toggle()
5979

60-
for sensor in analog_sensors.values():
61-
sensor.add_value()
62-
sensor.update_response_dict()
63-
led.toggle()
64-
# utime.sleep(.3)
6580

81+
io_components = init()
6682

6783
while True:
6884
loop()
69-
70-
# timer.init(period=500, mode=Timer.PERIODIC, callback=lambda k: loop())

serial_no.json

+2
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
{ "serial_no": "ecd3b04a-7c27-4553-a9f9-4de3f31065a0"
2+
}

0 commit comments

Comments
 (0)