1. 程式人生 > >MicroPython-GPS教程之TPYBoardv702控制5110顯示當前經緯度

MicroPython-GPS教程之TPYBoardv702控制5110顯示當前經緯度

-a 設置 當前 亮度 crop 拷貝 利用 分享 好的

  一、關於TPYBoardV702

  TPYBoardV702是目前市面上唯一支持通信定位功能的MicroPython開發板:支持Python3.0及以上版本直接運行。支持GPS+北鬥雙模定位、GPRS通信、短信功能、電話功能;板載溫濕度、光敏、三軸加速度傳感器、蜂鳴器、LCD5110顯示屏。免費提供定位測試服務平臺。實物如下圖:

技術分享

  二、利用TPYBoardV702完成所在地溫濕度及亮度數據采集

  1、具體要求

  利用TPYBoardV702完成所在地經緯度采集,並在5110顯示屏上顯示

  2、所需器件

  TPYBoardV702開發板一塊

  5110顯示屏一塊

  TPYBoardV702開發板板載定位功能,無需外接

  3、板載定位功能及使用介紹

  V702的開發板的整體整體亮點就是能進行定位,可以獲取到當前所在地的經緯度,高度,時間等等的一些信息。在這個實驗裏面我們就要用到獲取經緯度這一功能。

  這個開發板上主要的硬件功能已嵌入到了開發板上,使用起來非常方便,我們只需要進行簡單的設置操作就能獲取到經緯度,然後再進行數據解析,分割以及數據轉換等處理,就可以得到我們想要的經度和緯度了,之後我們在使用顯示屏把經緯度顯示出來就完成了在開發板上顯示經緯度了。下面來具體的說一下制作的過程。

  三、制作主要過程

  先上個圖,下面再開始說代碼的問題。

技術分享

  1、制作過程

  (1)首選我們需要做的是把5100顯示屏插到702開發板的5110顯示屏接口處;

  (2)在上面工作完成後,我們這裏需要用到主要的類庫,5110的類庫,我們需要把這個類庫的.py文件拷貝到開發板的盤符中;

  (3)完成以上工作後,我們開始main().py文件代碼的編輯;

  (4)對需要用到的類庫進行聲明和定義;

  (5)把需要把我們需要使用的變量進行一下定義;

  (6)把我們需要用到的接口進行聲明和定義,這裏我們主要用到了spi1和串口4這兩個接口,聲明串口4的時候,需要把串口波特率設置為115200;

  (7)下面開始主函數的編寫,這個實驗裏面我們用到了顯示,我們在程序的開始部分先進行顯示部分的初始化;

  (8)完成顯示部分初始化之後,我們需要做一個最重要的事情,那就是定義“Y6”引腳為輸出,然後把:“Y6”引腳拉低兩秒以上,之後把此引腳拉高。因為“Y6”引腳是控制整個板載定位系統開啟的開關,如果平時我們沒有用到定位系統的話,為了節省功耗,板載定位系統是處於關閉狀態的,需要使用時只需要拉低“Y6”引腳兩秒以上;

  (9)當看到開發板上的紅色直插LED燈快速閃爍的時候,說明板載定位系統正在啟動,當這個紅色直插指示燈結束快閃(指示燈處於慢閃或者熄滅狀態)說明板載定位系統已經啟動;

  (10)完成以上工作後,我們的準工作就已經完成了,剩下需要做的就是通過串口4發送相應的指令,獲取相應的數據,再把相應的數據進行數據轉換,並顯示到顯示屏上即可。

  2、具體代碼:

  

import pyb
import upcd8544
from machine import SPI,Pin
from pyb import UART
from ubinascii import hexlify
from ubinascii import *


leds = [pyb.LED(i) for i in range(1,5)]
P,L,SHUCHU=0,0,0
SPI = pyb.SPI(1) #DIN=>X8-MOSI/CLK=>X6-SCK
#DIN =>SPI(1).MOSI ‘X8‘ data flow (Master out, Slave in)
#CLK =>SPI(1).SCK  ‘X6‘ SPI clock
RST    = pyb.Pin(X20)
CE     = pyb.Pin(X19)
DC     = pyb.Pin(X18)
LIGHT  = pyb.Pin(X17)
lcd_5110 = upcd8544.PCD8544(SPI, RST, CE, DC, LIGHT)
count_=0
N2 = Pin(Y3, Pin.OUT_PP)
N1 = Pin(Y6, Pin.OUT_PP)#定義板載定位系統開關引腳為輸出
N1.low()
pyb.delay(2000)
N1.high()
pyb.delay(10000)#通過拉低和拉高開關引腳的電平,啟動板載定位系統
u2 = UART(4, 115200)#定義串口4,設置波特率為115200
i=0
w=0
d=0
q=0
G=0
j=0
def DataConver(str_,flag):#預先編寫數據處理函數,方便後期數據處理
    wei_=float(str_)/100
    wei_arr=str(wei_).split(.)
    val_=100000
    if flag==0:#緯度
        val_=10000
    wei_arr[1]=str(float(wei_arr[1])/60*val_).replace(.,‘‘)
    weidu=wei_arr[0]+.+wei_arr[1]
    return weidu
while True:
    pyb.LED(2).on()
    G=G+1
    u2.write(AT+GPSLOC=1\r\n)#通過串口發送指令,命令板載定位系統進行搜星操作
    pyb.delay(3000)
    _dataRead=u2.readall()
    print(搜星=,_dataRead)#延時,給系統搜星反應時間,提高搜星效率,並打印搜星結果
    pyb.delay(1000)
    u2.write(AT+GPSLOC=0\r\n)#通過串口發送獲取經緯度的指令,命令板載定位系統進行                             #經緯度獲取
    pyb.delay(200)
    print(BEIDOU)
    _dataRead=u2.readall()#保存串口獲取到的經緯度數據,如果定位信號不好,返回數據可                       #能全部為零,這個情況會導致定位周期延長
    if _dataRead!=None:
        print(原始數據=,_dataRead)
        print(原始數據長度:,len(_dataRead))
        if 60<len(_dataRead)<70:#這裏把正確的數據長度作為數據處理的開始
            _dataRead = _dataRead.decode(utf-8)
            _dataRead1=_dataRead.split(,)#把數據轉成‘utf-8‘格式,並且把數據按照“,”分                                      #隔開
            print(數據=,_dataRead1)
            print(len(_dataRead1),***)
            if len(_dataRead1)>4:#判斷數據轉換出來的數組數據長度(或者說是數組的元                              #素個數)作為進行數據轉換的開始
#*******************緯度計算********************
                weidu=_dataRead1[1]
                WD=DataConver(weidu,0)
#*******************經度計算********************
                jingdu=_dataRead1[2]
                JD=DataConver(jingdu,1)#利用我們上面做好的數據轉換函數,把數據也轉                                     #換成我們可以正常使用的格式
#***********************時間************************
    lcd_5110.lcd_write_string(JINGDU:,0,0)
    lcd_5110.lcd_write_string(str(JD),0,1)
    lcd_5110.lcd_write_string(WEIDU:,0,2)
    lcd_5110.lcd_write_string(str(WD),0,3)#利用5110顯示屏類庫中的顯示函數,進行數據顯                                    #示

MicroPython-GPS教程之TPYBoardv702控制5110顯示當前經緯度