|
| 1 | +######################################### |
| 2 | +#### WETLANDIA water level monitoring ### |
| 3 | +#### version 3.1 - dec. 2019 ### |
| 4 | +######################################### |
| 5 | +## Mind4Stormwater project: http://mind4stormwater.org, |
| 6 | +## feel free to use, reuse, modify, share!! |
| 7 | +## University of Melbourne / INSA Lyon |
| 8 | +## Frédéric Cherqui - [email protected] |
| 9 | +######################################### |
| 10 | + |
| 11 | +import config |
| 12 | +import utime |
| 13 | +import time |
| 14 | +import pycom |
| 15 | +from Lora import _LoraAU915 |
| 16 | +from Lora import _LoraAS923 |
| 17 | +from network import Sigfox |
| 18 | +from USblack import measureUSblack |
| 19 | +import socket |
| 20 | +import binascii #module that makes conversion between binary and Ascii |
| 21 | +import ustruct |
| 22 | +import machine |
| 23 | +from machine import Pin |
| 24 | +from machine import ADC |
| 25 | +from dth import DTH |
| 26 | +# from machine import WDT |
| 27 | +# |
| 28 | +# wdt = WDT(timeout=65000) #START WATCHDOG |
| 29 | +# print("watchdog ON") |
| 30 | +# wdt.feed() #RESET WATCHDOG |
| 31 | +# print("watchdog +") |
| 32 | + |
| 33 | +#INIT EVERYTHING |
| 34 | +pycom.rgbled(config.OFF) |
| 35 | +donepin = Pin(config.relay,mode=Pin.OUT) |
| 36 | +donepin(0) |
| 37 | +adc = ADC() |
| 38 | + |
| 39 | +#CONFIG COMMUNICATION |
| 40 | +if config.powersaving==False: |
| 41 | + pycom.rgbled(config.WHITE) |
| 42 | + utime.sleep(1) |
| 43 | +if config.sigfoxok==True: |
| 44 | + sigfox = Sigfox(mode=Sigfox.SIGFOX, rcz=Sigfox.RCZ4) # init Sigfox for: RCZ1 (Europe), RCZ4 (Australia) |
| 45 | + s = socket.socket(socket.AF_SIGFOX, socket.SOCK_RAW) # create a Sigfox socket |
| 46 | + s.setblocking(True) # make the socket blocking |
| 47 | + s.settimeout(30) #timeout 10 seconds |
| 48 | + s.setsockopt(socket.SOL_SIGFOX, socket.SO_RX, False) # configure it as uplink only |
| 49 | +if config.loraok==True and config.TTNregion=="AU915": |
| 50 | + s = _LoraAU915.setupLora() |
| 51 | +if config.loraok==True and config.TTNregion=="AS923": |
| 52 | + s = _LoraAS923.setupLora() |
| 53 | + |
| 54 | +################################ |
| 55 | +### LOOP IF NO NEED TO SLEEP ### |
| 56 | +################################ |
| 57 | +while (True): |
| 58 | + #START PROGR |
| 59 | + #LOAD MEASURE counter |
| 60 | + f = open("counter") |
| 61 | + num=f.read() |
| 62 | + f.close() |
| 63 | + f=open("counter","w") |
| 64 | + newcounter=int(num)+1 |
| 65 | + if newcounter>65000: |
| 66 | + newcounter=0 |
| 67 | + f.write(str(newcounter)) |
| 68 | + f.close() |
| 69 | + if config.powersaving==False: #and result.is_valid() |
| 70 | + print("Measure # ", newcounter) |
| 71 | + pycom.rgbled(config.RED) |
| 72 | + utime.sleep(0.5) |
| 73 | + pycom.rgbled(config.OFF) |
| 74 | + utime.sleep(0.2) |
| 75 | + pycom.rgbled(config.RED) |
| 76 | + utime.sleep(0.5) |
| 77 | + pycom.rgbled(config.OFF) |
| 78 | + us1med,us1mean,us1dev = measureUSblack.advanced_measuretime(config.trig,config.echo) |
| 79 | + if config.powersaving==False: |
| 80 | + print("Ultrasonic time = "+ str(us1med)+ " us") |
| 81 | + print("Ultrasonic distance = "+ str(us1med*0.34)+ " mm") |
| 82 | + if config.isDHT11==True: |
| 83 | + th = DTH(config.DHT,0) #for DHT11 sensor (blue) |
| 84 | + nameDTH="11" |
| 85 | + else: |
| 86 | + th = DTH(config.DHT,1) #for DHT22 sensor (white) |
| 87 | + nameDTH="22" |
| 88 | + # time.sleep(2) |
| 89 | + result = th.read() |
| 90 | + if config.powersaving==False: #and result.is_valid() |
| 91 | + print("Temperature DHT"+nameDTH+" = %d C" % result.temperature) |
| 92 | + print("Humidity DHT"+nameDTH+" = %d %%" % result.humidity) |
| 93 | + meanbatt=0 |
| 94 | + j=0 |
| 95 | + if config.powersaving==False: |
| 96 | + pycom.rgbled(config.BLUE) |
| 97 | + while j < 5: |
| 98 | + utime.sleep(0.2) |
| 99 | + batt = adc.channel(attn=3, pin=config.voltmeter) |
| 100 | + meanbatt += batt.voltage()/1000 |
| 101 | + j += 1 |
| 102 | + batt_volt = (meanbatt/j)*config.batcoeff #multiplcator coef to adjust the real value of the battery voltage |
| 103 | + if config.powersaving==False: |
| 104 | + print("Battery Voltage = %.3f V" % batt_volt) |
| 105 | + if config.powersaving==False: |
| 106 | + pycom.rgbled(config.PURPLE) |
| 107 | + utime.sleep(0.2) |
| 108 | + pycom.rgbled(config.OFF) |
| 109 | + utime.sleep(0.1) |
| 110 | + pycom.rgbled(config.PURPLE) |
| 111 | + utime.sleep(0.2) |
| 112 | + pycom.rgbled(config.OFF) |
| 113 | + print("Sending message...") |
| 114 | + ####################################### |
| 115 | + ####### FAKE VALUES TO TEST ########### |
| 116 | + #us1med=750 |
| 117 | + #result.temperature=12.2 |
| 118 | + #result.humidity=23.56 |
| 119 | + ####################################### |
| 120 | + newcounter_1 = int(newcounter//256) |
| 121 | + newcounter_2 = int(newcounter%256) |
| 122 | + us1_1 = int(us1med//256) |
| 123 | + us1_2 = int(us1med%256) |
| 124 | + #minimun number of bytes (for Sigfox google file) |
| 125 | + batt12 = int(batt_volt*25) |
| 126 | + temp12 = int(result.temperature*5) |
| 127 | + humi12 = int(result.humidity*2) |
| 128 | + s.send(bytes([newcounter_1, newcounter_2, us1_1,us1_2,batt12,temp12,humi12])) |
| 129 | + utime.sleep(0.1) |
| 130 | + if config.powersaving==False: |
| 131 | + print("Message:",newcounter_1, newcounter_2, us1_1,us1_2,batt_volt,result.temperature,result.humidity) |
| 132 | + print("Message sent through SIGFOX:",bool(config.sigfoxok)) |
| 133 | + print("Message sent through LoRa - ",config.TTNregion," :",bool(config.loraok)) |
| 134 | + print("------------------------------------") |
| 135 | + pycom.rgbled(config.GREEN) |
| 136 | + utime.sleep(0.2) |
| 137 | + pycom.rgbled(config.OFF) |
| 138 | + utime.sleep(0.1) |
| 139 | + pycom.rgbled(config.GREEN) |
| 140 | + utime.sleep(0.2) |
| 141 | + pycom.rgbled(config.OFF) |
| 142 | + utime.sleep(0.1) |
| 143 | + if config.needsleep == True: |
| 144 | + if config.powersaving==False: |
| 145 | + print("going to sleep now") |
| 146 | + pycom.rgbled(config.BLUE) |
| 147 | + while True: |
| 148 | + donepin(0) |
| 149 | + utime.sleep(0.1) |
| 150 | + donepin(1) |
| 151 | + utime.sleep(0.1) |
| 152 | + # print("waiting 10 seconds before a new measure") |
| 153 | + # utime.sleep(10) #waiting 5 minutes between measures if sleep is not needed... |
0 commit comments