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

2017-07-022.1万
精华项目
AI 快速预览详细 收起
本文介绍了如何使用uPyCraft IDE和MicroPython制作一个GPS轨迹记录仪。硬件清单包括FireBeetle Board-ESP32、Ublox-6mGPS模块和OLED显示屏。通过详细的接线图和代码示例,展示了如何配置GPS模块并显示经纬度、时间和卫星数量。还讨论了数据存储和一些提升空间,如增加按钮控制和数据过滤。
【本期故事】
本期制作一个gps轨迹记录仪,使用的uPyCraft IDE以及micropython。为了叠装在萤火虫esp32上,我们还专门制作了一块扩展板(含gps模块以及oled模块)。下面一起来看看吧。
一步一步使用uPyCraft学习MicroPython之GPS记录器图3

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

Oled
1
0.96寸,ssd1306驱动,IIC接口
FireBeetle Board-空白PCB
1
便于制作gps&oled扩展板
杜邦线
6

【软件准备】
  
品名
  
版本
备注
uPyCraft
V0.20
DF出品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)

OLED
vcc-----3V3(FireBeetle Board-ESP32)
GND---GND(FireBeetle Board-ESP32)
scl-----scl(FireBeetle Board-ESP32)
sda----sda(FireBeetle Board-ESP32)
使用飞线,因为接线不过,所以很容易制作,gps使用三根排针,oled只用四根。
一步一步使用uPyCraft学习MicroPython之GPS记录器图1



天线采用双面胶固定,你也可以使用其他方式,自由想象吧。gps模块是直插,天线也可换做SMA接口。
一步一步使用uPyCraft学习MicroPython之GPS记录器图2
【关于Micropygps库】
https://github.com/inmcm/micropyGPS
micropyGPS 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的例题可以参考。

【软件代码】
  1. from machine import Pin,I2C
  2. import time
  3. import ssd1306
  4. from micropyGPS import MicropyGPS
  5. i2c = I2C(scl=Pin(22), sda=Pin(21), freq=100000)
  6. lcd=ssd1306.SSD1306_I2C(128,64,i2c)
  7. com = machine.UART(2,baudrate=9600,rx=25,tx=26,timeout=10) #定义uart2
  8. my_gps = MicropyGPS(8)#东八区的修正
  9. my_gps.local_offset
  10. def get_GPS_values():   
  11.     global gps_values,rtc #定义两个全局变量
  12.     time.sleep(2)
  13.     cc = com.readline()
  14.     for x in cc:
  15.         my_gps.update(chr(x))
  16.     #lat&long
  17.     gps_values = str(my_gps.latitude[0] + (my_gps.latitude[1] / 60)) + ',' + str(my_gps.longitude[0] + (my_gps.longitude[1] / 60))
  18.     #datetime
  19.     date = my_gps.date
  20.     timestamp = my_gps.timestamp
  21.     hour = timestamp[0]
  22. rtc = str(int(timestamp[0]))+":"+str(int(timestamp[1]))+":"+str(int(timestamp[2]))
  23.     return gps_values,rtc
  24. while 1:
  25.   time.sleep_ms(20)
  26.   get_GPS_values()
  27.   lcd.fill(0) #清屏,如果是ssd1306修改的库,可以用clear()
  28.   lcd.show()
  29.   lcd.text("GPS:",5,0)
  30.   lcd.text(gps_values,0,16)
  31.   lcd.text("Sate:",5,36)
  32.   lcd.text(str(my_gps.satellites_in_use),64,36)
  33.   lcd.text("Time:",5,50)
  34.   lcd.text(rtc,64,50 )
  35.   lcd.show()
  36.   my_gps.start_logging('log.txt') #制定存储的文件,是以“追加”的方式打开,请参考库
  37.   my_gps.write_log(gps_values+" "+rtc+" state:" +str(my_gps.satellites_in_use)+"\n")  #记得加入换行符
  38.   time.sleep_ms(100)
  39.   my_gps.stop_logging() #停止记录
  40.   print(gps_values) #本地调试,可删除
  41.   print(rtc)#可删除
复制代码

【测试】
(一)gps模块首先要进行配置和检测,很多玩家直接插单片机,这是我很不推荐的。玩gps模块,首先用usb-ttl转换模块连接到pc上,使用u-center等上位机软件,配置波特率(默认9600),观察其搜星、定位功能是否正常。如果正常了,再开展下一步测试。
(二)上电后,可以看到oled上面显示出三组信息:一组是经纬度,以及转换成小数点形式的以度为单位的数据,第二组是显示gps模块可用的卫星数量。第三组是rtc时间。因为我们已经用了东八区补偿,所以显示的时间就是本地北京时间了。
2秒钟刷新一次数据。
(三)路径的存储,可以将经纬度和rtc数据保存在log.txt上。由于本地flash有限,你也可以加在tf卡上,这样可以长时间保存路径数据。
一步一步使用uPyCraft学习MicroPython之GPS记录器图5
(四)提升空间:
一是可以增加一个按钮,驱动数据记录和停止。
二是可以将log.txt的数据格式,记录为google earth的kml格式文件,这样可以直接在谷歌数字地球中导入路径显示。
三是你可以把重复的数据进行过滤,这样可以节省log.txt存储空间。
这三个玩法就有待玩家进一步提升吧,别忘记了和大家分享啊。

(五)存在的问题
一是在运行中,出现过数据解析错误的现象,出现的时间不等,还有待进一步分析。

二是在笔记本电脑(win10)以及台式机(win7)上,在upy使用中,发现过个别库在运行时报错,同样的程序,同样版本0.20,在两个系统上可能出现:
一步一步使用uPyCraft学习MicroPython之GPS记录器图4

这是在win7的upy 0.2上出现的,但是在win10上没有问题。可以和师兄们继续探讨。

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

下载附件step5.rar

【感谢】

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

创作许可协议

本项目采用 None(不开放任何权利,保留所有权利) 进行许可。

评论(5)
yoyojacky
yoyojacky
不错, 加油加油!
johndavid
johndavid
micropyGPS.py 如何安装?楼主 upip无法安装。。。急切问一下 ,谢谢 直接上传这个文件到板子内部空间,无法import。。。
沧海笑
沧海笑
作者
回复johndavid
下载后,直接传入板子,注意目录以及大小写。
秦皇岛岛主
秦皇岛岛主
沧海师兄玩的确实高端。gps输出内容哦分析我还不了解呢。学习了
hnyzcj
hnyzcj
imliu-bo
imliu-bo
:lol抢个沙发 沧海师兄写的总是这么详细 同时还考虑到了 提升方向 必须赞一个
- 没有更多了 -