沧海笑 发表于 2017-7-2 15:54:44

一步一步使用uPyCraft学习MicroPython之GPS记录器

【一步一步使用uPyCraft学习MicroPython之GPS记录器】【本期故事】本期制作一个gps轨迹记录仪,使用的uPyCraft IDE以及micropython。为了叠装在萤火虫esp32上,我们还专门制作了一块扩展板(含gps模块以及oled模块)。下面一起来看看吧。


【硬件清单】
品名数量备注
FireBeetle Board-ESP321带800mah电池一块
Ublox-6mGPS模块1

Oled10.96寸,ssd1306驱动,IIC接口
FireBeetle Board-空白PCB1便于制作gps&oled扩展板
杜邦线6

【软件准备】
品名版本备注
uPyCraftV0.20DF出品MicroPython IDE
Micropygps库
Mp下的gps解析库

【gps&oled扩展板的制作】利用一块FireBeetle Board-空白PCB,增加两个模块。接线如下:gps:tx--------D2(FireBeetle Board-ESP32)vcc-----3V3(FireBeetle Board-ESP32)GND---GND(FireBeetle Board-ESP32)
OLEDvcc-----3V3(FireBeetle Board-ESP32)GND---GND(FireBeetle Board-ESP32)scl-----scl(FireBeetle Board-ESP32)sda----sda(FireBeetle Board-ESP32)使用飞线,因为接线不过,所以很容易制作,gps使用三根排针,oled只用四根。




天线采用双面胶固定,你也可以使用其他方式,自由想象吧。gps模块是直插,天线也可换做SMA接口。 【关于Micropygps库】https://github.com/inmcm/micropyGPSmicropyGPS is a full featured GPS NMEA sentenceparser for use with MicroPython and the PyBoard embedded platform. It's alsofully compatible with Python 3.x本身为pyb设计,但是是全功能的GPS NMEA解析库。只要用mp以及uart传送gps数据,就可能使用本库进行解析。更多详情可以查看giuhub的介绍。文档还是比较清楚的,例题方面需要大家自己搜,提供了pyb的例题可以参考。
【软件代码】from machine import Pin,I2C
import time
import ssd1306
from micropyGPS import MicropyGPS

i2c = I2C(scl=Pin(22), sda=Pin(21), freq=100000)
lcd=ssd1306.SSD1306_I2C(128,64,i2c)
com = machine.UART(2,baudrate=9600,rx=25,tx=26,timeout=10) #定义uart2
my_gps = MicropyGPS(8)#东八区的修正
my_gps.local_offset

def get_GPS_values():   
    global gps_values,rtc #定义两个全局变量
    time.sleep(2)
    cc = com.readline()
    for x in cc:
      my_gps.update(chr(x))
    #lat&long
    gps_values = str(my_gps.latitude + (my_gps.latitude / 60)) + ',' + str(my_gps.longitude + (my_gps.longitude / 60))
    #datetime
    date = my_gps.date
    timestamp = my_gps.timestamp
    hour = timestamp
rtc = str(int(timestamp))+":"+str(int(timestamp))+":"+str(int(timestamp))
    return gps_values,rtc

while 1:

time.sleep_ms(20)
get_GPS_values()
lcd.fill(0) #清屏,如果是ssd1306修改的库,可以用clear()
lcd.show()
lcd.text("GPS:",5,0)
lcd.text(gps_values,0,16)
lcd.text("Sate:",5,36)
lcd.text(str(my_gps.satellites_in_use),64,36)
lcd.text("Time:",5,50)
lcd.text(rtc,64,50 )
lcd.show()
my_gps.start_logging('log.txt') #制定存储的文件,是以“追加”的方式打开,请参考库
my_gps.write_log(gps_values+" "+rtc+" state:" +str(my_gps.satellites_in_use)+"\n")#记得加入换行符
time.sleep_ms(100)
my_gps.stop_logging() #停止记录
print(gps_values) #本地调试,可删除
print(rtc)#可删除
【测试】(一)gps模块首先要进行配置和检测,很多玩家直接插单片机,这是我很不推荐的。玩gps模块,首先用usb-ttl转换模块连接到pc上,使用u-center等上位机软件,配置波特率(默认9600),观察其搜星、定位功能是否正常。如果正常了,再开展下一步测试。(二)上电后,可以看到oled上面显示出三组信息:一组是经纬度,以及转换成小数点形式的以度为单位的数据,第二组是显示gps模块可用的卫星数量。第三组是rtc时间。因为我们已经用了东八区补偿,所以显示的时间就是本地北京时间了。2秒钟刷新一次数据。(三)路径的存储,可以将经纬度和rtc数据保存在log.txt上。由于本地flash有限,你也可以加在tf卡上,这样可以长时间保存路径数据。 (四)提升空间:一是可以增加一个按钮,驱动数据记录和停止。二是可以将log.txt的数据格式,记录为google earth的kml格式文件,这样可以直接在谷歌数字地球中导入路径显示。三是你可以把重复的数据进行过滤,这样可以节省log.txt存储空间。这三个玩法就有待玩家进一步提升吧,别忘记了和大家分享啊。
(五)存在的问题一是在运行中,出现过数据解析错误的现象,出现的时间不等,还有待进一步分析。
二是在笔记本电脑(win10)以及台式机(win7)上,在upy使用中,发现过个别库在运行时报错,同样的程序,同样版本0.20,在两个系统上可能出现:

这是在win7的upy 0.2上出现的,但是在win10上没有问题。可以和师兄们继续探讨。
注意:(1)对于8266,可以使用两个uart口。其中uart1只能发送不能接收,uart0能接收,但是,repl操作是在uart0上的,所以您不能同时一边uart0与设备进行交互,同时又使用repl。也就是说,不能在repl调试窗尝试uart0。(2)汉字注释是为了便于玩家理解,建议运行时删除或改为英文micropygps库,便于下载。


【感谢】
感谢秦皇岛岛主师兄的例程和指导。感谢群里玩家的支持,沧海抱拳。

imliu-bo 发表于 2017-7-2 16:38:47

:lol抢个沙发沧海师兄写的总是这么详细 同时还考虑到了 提升方向必须赞一个

hnyzcj 发表于 2017-7-2 19:18:25

秦皇岛岛主 发表于 2017-7-3 10:30:05

沧海师兄玩的确实高端。gps输出内容哦分析我还不了解呢。学习了

johndavid 发表于 2022-8-31 14:46:57

micropyGPS.py 如何安装?楼主 upip无法安装。。。急切问一下 ,谢谢 直接上传这个文件到板子内部空间,无法import。。。

yoyojacky 发表于 2022-8-31 16:23:17

不错, 加油加油!

沧海笑 发表于 2022-9-28 21:28:08

johndavid 发表于 2022-8-31 14:46
micropyGPS.py 如何安装?楼主 upip无法安装。。。急切问一下 ,谢谢 直接上传这个文件到板子内部空间,无 ...

下载后,直接传入板子,注意目录以及大小写。
页: [1]
查看完整版本: 一步一步使用uPyCraft学习MicroPython之GPS记录器