Lopy GPS/DHT/RFiD
-
Hi all
so now that I have my Lopy working with my own LoraWan network (based on RPi+ic880 and Loraserver+ mainflux)
I wanted to add sensors to the Lopy
is there already a DHT library
a GPS library ? I connected my GPS (I didn't get any pytrack yet) sensors through UART but there is no sentence support for the reading I found a python micropython lib called micropyGPS but I'm still having issue with the libany suggestion are welcome
I'll share some of the code later (from Lora or LoraWAN to mqtt server)
-
@100rabhh : Just put these lines to your code:
from nmeaParser import NmeaParser #Create NMEA structure nmea = NmeaParser() #..then send your uart input to the library if gps_uart.any(): nmea.update(gps_uart.readline()) #...then you can access your data by print ('Latitude: ' + str(nmea.latitude)) print ('Longitude: ' + str(nmea.longitude)) print('Altitude:'+ str(nmea.altitude)) #...there are several other data available, just check the parser code for more info
-
@affoltep Hi, How can i use it with my code?
Here is my simple receive code for Adafruit Ultimate Breakout GPS----
from machine import Pin
from machine import UART#Interface definitons for GPS
gps_pps = Pin('P23', mode = Pin.IN)
gps_enable = Pin('P8', mode=Pin.OUT)
gps_enable(False)
#gps_uart = UART(2, 9600)
#gps_uart.init(9600, bits=8, parity=None, stop=1)
gps_uart = UART(2, baudrate=9600, bits=8, parity=None, stop=1, pins=('P10', 'P11'))
uart.write('abs')
gps_enable(True)
while True:
if gps_uart.any():
print(gps_uart.readline())Here i am simply reading the strings from GPS Rx. Now how do i implement in your code to parse it? Please help...
-
Cool the GPS part work well
Beside DHT11 that is reading all the time zero all the other are working well
PIR, RFId, GPS, Distnace , all this with Lora working to send the messages
Next is accelerometer MPU 92/65
-
@johnmcdnz Cool, thanks - in case it still doesn't work, feel free to come to this quarter, spring is starting here ;o)
-
@affoltep The NmeaParser codes works really well (almost) :-)
I've been using it this weekend, and discovered a minor flaw, and have fix for you.
The code ignores the S/W hemispheres, so will only be correct for 1/4 of the planet.This change provides the correction
# Update Object Data
self.latitude = lat_degs + (lat_mins/60)
if lat_hemi == 'S':
self.latitude = -self.latitude
self.longitude = lon_degs + (lon_mins/60)
if lon_hemi == 'W':
self.longitude = -self.longitudeGood job I can test in the Southern hemisphere and spot the problem!
Once I have my project working I'll post on github.
-
@Movsun I changed the name to DHT22RinusW-call.py. Described in the readme.
-
I never got the dht working I get always 28025 which is the zero values
not sure id there are other action or I'm missing soemthing from teh library DHT itself>>> import DHT >>> dht_pin=Pin('P19', Pin.OPEN_DRAIN) >>> dht_pin(1) >>> temp, hum = DHT.DHT11(dht_pin) >>> temp_str = '{}.2{}'.format(temp//10,temp%10) >>> hum_str = '{}.2{}'.format(hum//10,hum%10) >>> print("sending Temp/Hum : %s/%s" % (temp_str,hum_str)) sending Temp/Hum : 280.25/280.25
-
@johnmcdnz
Hello, I look into your github repository. But I count not find DHT22RinusW.py file.
Where can I find the file? Thank you in advance.
-
@gas I wrote a minimalistic NMEA parser, based on micropyGPS, which parses just the GPGGA messages. This message delivers lon, lat, alt, hdop and UTC. Feel free to use it.
#Minimalistic NMEA-0183 message parser, based on micropyGPS #Version 0.1 - January 2017 #Autor: Peter Affolter import utime class NmeaParser(object): """NMEA Sentence Parser. Creates object that stores all relevant GPS data and statistics. Parses sentences using update(). """ def __init__(self): """Setup GPS Object Status Flags, Internal Data Registers, etc""" ##################### # Data From Sentences # Time self.utc = (0) # Object Status Flags self.fix_time = 0 self.valid_sentence = False # Position/Motion self.latitude = 0.0 self.longitude = 0.0 self.altitude = 0.0 # GPS Info self.satellites_in_use = 0 self.hdop = 0.0 self.fix_stat = 0 #raw data segments self.nmea_segments = [] def update(self, sentence): self.valid_sentence = False self.nmea_segments = str(sentence).split(',') #Parse GPGGA if (self.nmea_segments[0] == "b'$GPGGA"): self.valid_sentence = True try: # UTC Timestamp utc_string = self.nmea_segments[1] # Skip timestamp if receiver doesn't have on yet if utc_string: hours = int(utc_string[0:2]) minutes = int(utc_string[2:4]) seconds = float(utc_string[4:]) else: hours = 0 minutes = 0 seconds = 0.0 # Number of Satellites in Use satellites_in_use = int(self.nmea_segments[7]) # Horizontal Dilution of Precision hdop = float(self.nmea_segments[8]) # Get Fix Status fix_stat = int(self.nmea_segments[6]) except ValueError: return False # Process Location and Speed Data if Fix is GOOD if fix_stat: # Longitude / Latitude try: # Latitude l_string = self.nmea_segments[2] lat_degs = float(l_string[0:2]) lat_mins = float(l_string[2:]) # Longitude l_string = self.nmea_segments[4] lon_degs = float(l_string[0:3]) lon_mins = float(l_string[3:]) except ValueError: return False # Altitude / Height Above Geoid try: altitude = float(self.nmea_segments[9]) geoid_height = float(self.nmea_segments[11]) except ValueError: return False # Update Object Data self.latitude = lat_degs + (lat_mins/60) self.longitude = lon_degs + (lon_mins/60) self.altitude = altitude self.geoid_height = geoid_height # Update Object Data self.timestamp = (hours, minutes, seconds) self.satellites_in_use = satellites_in_use self.hdop = hdop self.fix_stat = fix_stat # If Fix is GOOD, update fix timestamp if fix_stat: self.fix_time = utime.time() return True
-
I have connected the DHT22 sensor and had working very well. My code and description is here. Pay attention to the sample size change I made and that I had to adjust the bit sampling. Using the print statements to debug and understanding the one wire protocol can help in fine tuning the data conversion. Hope this helps.
https://github.com/johnmcdnz/LoPy-DHT-transmission