From 9bb9ca2a7446da5bcf111b1fa95899345a96a755 Mon Sep 17 00:00:00 2001 From: nfa Date: Thu, 23 Dec 2021 14:15:22 +0800 Subject: [PATCH] =?UTF-8?q?=E4=B8=8A=E4=BC=A0=E6=96=87=E4=BB=B6=E8=87=B3?= =?UTF-8?q?=20'src'?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/electricity.py | 19 ++++++ src/erequest.py | 155 +++++++++++++++++++++++++++++++++++++++++++++ src/led.py | 35 ++++++++++ src/light.py | 16 +++++ src/smoke.py | 16 +++++ 5 files changed, 241 insertions(+) create mode 100644 src/electricity.py create mode 100644 src/erequest.py create mode 100644 src/led.py create mode 100644 src/light.py create mode 100644 src/smoke.py diff --git a/src/electricity.py b/src/electricity.py new file mode 100644 index 0000000..64aa314 --- /dev/null +++ b/src/electricity.py @@ -0,0 +1,19 @@ +import board +import digitalio +import time + +elecio = digitalio.DigitalInOut(board.GP7) +elecio.direction = digitalio.Direction.INPUT + +def mesure_electricity(): + try: + # print(elecio.value) + return elecio.value + except: + return 1 + +if __name__ == "__main__": + while True: + # print(dropio.value) + time.sleep(1) + print(mesure_electricity()) \ No newline at end of file diff --git a/src/erequest.py b/src/erequest.py new file mode 100644 index 0000000..09bdc8a --- /dev/null +++ b/src/erequest.py @@ -0,0 +1,155 @@ +import board +import busio +import digitalio +import adafruit_requests as requests +from adafruit_wiznet5k.adafruit_wiznet5k import WIZNET5K +import adafruit_wiznet5k.adafruit_wiznet5k_socket as socket +import time +import rtc +import adafruit_hashlib as hashlib +from light import flash_led +from config import IP_ADDR,MAC_ADDR,NET_MASK,GATEWAY,DNS,SECRET,SERVER_URL,SN,TIMESPAN,A_FIRE,A_TEMP,A_HUM + +rt = rtc.RTC() +ipl = IP_ADDR.split('.') +nml = NET_MASK.split('.') +gwl = GATEWAY.split('.') +dnl = DNS.split('.') +macl = MAC_ADDR.split(':') +print(macl) +ipaddr = (int(ipl[0]),int(ipl[1]),int(ipl[2]),int(ipl[3])) +macaddr = (int(macl[0],16),int(macl[1],16),int(macl[2],16),int(macl[3],16),int(macl[4],16),int(macl[5],16)) +netmask = (int(nml[0]),int(nml[1]),int(nml[2]),int(nml[3])) +gateway = (int(gwl[0]),int(gwl[1]),int(gwl[2]),int(gwl[3])) +dns = (int(dnl[0]),int(dnl[1]),int(dnl[2]),int(dnl[3])) + +# Setup your network configuration below +print("Wiznet5k WebClient Test (no DHCP)") +print(time.localtime()) +cs = digitalio.DigitalInOut(board.GP17) +spi_bus = busio.SPI(board.GP18, MOSI=board.GP19, MISO=board.GP16) + +# Initialize ethernet interface without DHCP +eth = WIZNET5K(spi_bus, cs, is_dhcp=False, mac=macaddr) +# Set network configuration + +def eth_init(): + global eth + global ipaddr,netmask,gateway,dns # Set network configuration + nok = True + try: + eth.ifconfig = (ipaddr, netmask, gateway, dns) + print("Chip Version:", eth.chip) + print("MAC Address:", [hex(i) for i in eth.mac_address]) + print("My IP address is:", eth.pretty_ip(eth.ip_address)) + print("Link Status:", eth.link_status) + time.sleep(0.1) + requests.set_socket(socket, eth) + except: + nok = False + return nok +# eth.ifconfig = (ipaddr, netmask, gateway, dns) + +def check_time(): + global rt + # requests.set_socket(socket, eth) + print('Updating time ...') + # eth._debug = True + try: + gdata = {'spot':SN,'timespan':TIMESPAN,'afire':A_FIRE,'atemp':A_TEMP,'ahum':A_HUM} + print(gdata) + servtime = get_data(SERVER_URL+'/env/time/', gdata) + rt.datetime = time.localtime(int(servtime)) + except: + pass + # print(r.datetime) + +def check_netstatus(): + global eth + stcode = 1 + try: + if eth.link_status: + flash_led('normal') + stcode = 0 + else: + flash_led('alarm') + stcode = 1 + except: + pass + return stcode + +def get_token(): + global rt + try: + stamp = str(rt.datetime[0])+'##'+str(rt.datetime[3]%10) + print(stamp) + m = hashlib.sha1() + m.update((SECRET+stamp).encode('utf-8')) + return m.hexdigest() + except: + return '' + +def parse_data(data): + res = '' + try: + if isinstance(data, dict): + t = [] + for k in data: + t.append(k+'='+str(data[k])) + res = '&'.join(t) + except: + pass + return res + +def get_data(server_addr, data): + if not server_addr: + print('Server address must be set.') + return False + # Initialize a requests object with a socket and ethernet interface + #requests.set_socket(socket, eth) + print('Geting data :'+server_addr) + # eth._debug = True + res = 'No data received.' + try: + r = requests.get(server_addr+'?'+parse_data(data), **{'timeout':0.1}) + res = r.text + print(res) + r.close() + except: + pass + return res + +def postdata(server_addr,data): + if not server_addr: + print('Server address must be set.') + return False + # Initialize a requests object with a socket and ethernet interface + requests.set_socket(socket, eth) + data['token']= get_token() + print('Token is :'+data['token']) + print('Sending data :'+server_addr) + # eth._debug = True + requests.request('POST',server_addr,data=data) + return True + +def post_data(server_addr,data): + if not server_addr: + print('Server address must be set.') + return False + try: + data['token']= get_token() + print('Token is :'+data['token']) + print('Sending data :'+server_addr) + # eth._debug = True + r = requests.post(server_addr,**{'data':data,'timeout':0.1}) + r.close() + except: + pass + return True + +if __name__ == "__main__": + eth_init() + get_data('http://172.18.17.136:8000/env/cmd/',{'spot':'WJSPJ001'}) + # post_data('http://2.54.41.27:8000/env/api/',{'errno':0,'electricity':True,'temperature':28.5,'humidity':50,'water':False,'fire':8800}) + # post_data('http://192.168.2.76:8000/env/api/',{'sn':'WJSPJ002','errno':0,'electricity':True,'temperature':29.5,'humidity':56,'water':False,'fire':3800}) + # post_test('http://www.changzhou.gov.cn/ns_class/06v86ba2') diff --git a/src/led.py b/src/led.py new file mode 100644 index 0000000..537a930 --- /dev/null +++ b/src/led.py @@ -0,0 +1,35 @@ +import board +import busio +import digitalio + +ledpins = [] +ledpins.append(digitalio.DigitalInOut(board.GP12)) +ledpins.append(digitalio.DigitalInOut(board.GP11)) +ledpins.append(digitalio.DigitalInOut(board.GP10)) +ledpins.append(digitalio.DigitalInOut(board.GP6)) +ledpins.append(digitalio.DigitalInOut(board.GP13)) +ledpins.append(digitalio.DigitalInOut(board.GP14)) +ledpins.append(digitalio.DigitalInOut(board.GP15)) + +for ledpin in ledpins: + ledpin.direction = digitalio.Direction.OUTPUT + +displist = ( + (1, 0, 0, 0, 0, 0, 0), + (1, 1, 1, 0, 0, 1, 1), + (0, 1, 0, 0, 1, 0, 0), + (0, 1, 0, 0, 0, 0, 1), + (0, 0, 1, 0, 0, 1, 1), + (0, 0, 0, 1, 0, 0, 1), + (0, 0, 0, 1, 0, 0, 0), + (1, 1, 0, 0, 0, 1, 1), + (0, 0, 0, 0, 0, 0, 0), + (0, 0, 0, 0, 0, 0, 1), + (0, 0, 0, 0, 0, 1, 0) + ) + +def show_num(number): + for i in range(7): + ledpins[i].value = displist[number][i] + + diff --git a/src/light.py b/src/light.py new file mode 100644 index 0000000..2a3293c --- /dev/null +++ b/src/light.py @@ -0,0 +1,16 @@ +import board +import busio +import digitalio + +normal_led = digitalio.DigitalInOut(board.GP22) +alarm_led = digitalio.DigitalInOut(board.GP21) +normal_led.direction = digitalio.Direction.OUTPUT +alarm_led.direction = digitalio.Direction.OUTPUT + +def flash_led(mode='normal'): + if mode == 'normal': + normal_led.value = True + alarm_led.value = False + else: + normal_led.value = False + alarm_led.value = True diff --git a/src/smoke.py b/src/smoke.py new file mode 100644 index 0000000..c686521 --- /dev/null +++ b/src/smoke.py @@ -0,0 +1,16 @@ +import board +import analogio +import time + +smk = analogio.AnalogIn(board.GP27) +def mesure_smoke(): + try: + # print(smk.value) + return smk.value + except: + return 0 + +if __name__ == "__main__": + while True: + print(mesure_smoke()) + time.sleep(1)