from machine import I2C, Pin
from time import sleep
from pico_i2c_lcd import I2cLcd
from utime import sleep_us, time
from micropython import const
from hx711 import HX711
### LCD SCREEN CODE###
i2c = I2C(0, sda=Pin(0), scl=Pin(1), freq=400000)
I2C_ADDR = i2c.scan()[0]
lcd = I2cLcd(i2c, I2C_ADDR, 2, 16)
###LOAD CELL CODE###
class Scales(HX711):
def __init__(self, d_out, pd_sck):
super(Scales, self).__init__(d_out, pd_sck)
self.offset = 0
def reset(self):
self.power_off()
self.power_on()
def tare(self):
self.offset = self.read()
def raw_value(self):
return self.read() - self.offset
def stable_value(self, reads=10, delay_us=500):
values = []
for _ in range(reads):
values.append(self.raw_value())
sleep_us(delay_us)
return self._stabilizer(values)
@staticmethod
def _stabilizer(values, deviation=10):
weights = []
for prev in values:
weights.append(sum([1 for current in values if abs(prev - current) / (prev / 100) <= deviation]))
return sorted(zip(values, weights), key=lambda x: x[1]).pop()[0]
#import network
#import socket
#import machine
#from picozero import pico_temp_sensor, pico_led
#ssid = 'Dojo'
#password = 'mojojojo'
def connect():
#Connect to WLAN
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
wlan.connect(ssid, password)
while wlan.isconnected() == False:
print('Waiting for connection...')
sleep(1)
ip = wlan.ifconfig()[0]
print(f'Connected on {ip}')
return ip
def open_socket(ip):
# Open a socket
address = (ip, 80)
connection = socket.socket()
connection.bind(address)
connection.listen(1)
return connection
def webpage(temperature, state):
#Template HTML
html = f"""
<!DOCTYPE html>
<html>
<p>Load Weight is {shown_weight}</p>
<p>Temperature is {temperature}</p>
</body>
</html>
"""
return str(html)
def serve(connection):
#Start a web server
state = 'OFF'
pico_led.off()
temperature = 0
while True:
client = connection.accept()[0]
request = client.recv(1024)
request = str(request)
print(request)
try:
request = request.split()[1]
except IndexError:
pass
shown_weight = shown_weight
temperature = pico_temp_sensor.temp
html = webpage(shown_weight, temperature)
client.send(html)
client.close()
if __name__ == "__main__":
scales = Scales(d_out=5, pd_sck=4)
scales.tare()
#Trying to get the shown_weight value in the site.
while True:
val = scales.raw_value()
weight = val*0.00525
#weight = val
shown_weight = round(weight,2)
#if shown_weight >= 1:
lcd.putstr("Load Value"+"\n")
lcd.putstr(str(shown_weight)+"Lbs")
sleep(0.7)
lcd.clear()
#else:
# lcd.putstr("Load Value"+"\n")
# lcd.putstr("0 Lbs")
# sleep(1)
# lcd.clear()