以前の記事。
RP2040-ZEROとGC9A01の試験→https://matsu-log.blogspot.com/2024/03/aitendom128gc9a01a-gc9a01rp2040-zero.html
GPS AT6558→https://matsu-log.blogspot.com/2024/03/gpsat6558.html
今度は、RP2040-ZEROに液晶とGPSを繋いで、緯度経度を液晶に表示してみる。
USART0を使いたいので、GP0,1を空ける。DCとRSTは、代わりにGP3,4に繋いでおく。
■液晶
- GND → GND
- VCC → 3V3
- SCL → GP6/SPI0 SCK
- SDA → GP5/SPI0 TX
- RES → GP3
- DC → GP4
- CS → GP5/SPI0 CSn
- BLK → 未使用
■GPS
- GND → GND
- VCC → 3V3
- TX → GP1
※RXは繋がなくてもいいので無視
Fritzingで作った回路図。探してみると、RP2040-ZEROなどたくさんのAdd-onパーツが公開されていて非常に有難い。さすがにGPSは無かったので、似たような部品と汎用ヘッダで代用。
以下のようなコードで、$GNGGAと$GNRMCから日時と緯度経度を吸い上げて、液晶に表示した。液晶、GPSをうまく繋げられていたので、これはすんなり作れた。
以下、micropythonコード。
from machine import Pin, SPIimport gc9a01py as gc9a01import timeimport vga2_8x16 as fontfrom machine import UARTuart = UART(0, baudrate=9600, tx=0, rx=1)# GPSの結果から日時と緯度経度を抜き出すdef GPS(input):if input is None:return ("","","","")msgs = str(input)[2:-1].split("\\r\\n")lat = ""lgt = ""date = ""time = ""for msg in msgs:if msg[0:6] is "$GNGGA":item = msg.split(",")if len(item) <= 4:continue#print(item[1], item[2], item[4])time = item[1]lat = item[2]lgt = item[4]elif msg[0:6] is "$GNRMC":item = msg.split(",")if len(item) <= 10:continuetime = item[1]lat = item[3]lgt = item[5]date = item[9]return (date, time, lat, lgt)# GC9A01初期化SPI_PORT = 0SPI_BAUDRATE = 60000000RESET_PIN = Pin(3, Pin.OUT)DC_PIN = Pin(4, Pin.OUT)CS_PIN = Pin(5, Pin.OUT)spi = SPI(SPI_PORT, baudrate=SPI_BAUDRATE, sck=Pin(6), mosi=Pin(7))tft = gc9a01.GC9A01(spi=spi, dc=DC_PIN, cs=CS_PIN, reset=RESET_PIN, backlight=None, rotation=0)bgcolor = gc9a01.color565(0x00, 0x44, 0x22)tft.fill(bgcolor)tft.text(font,"GPS Tracker",80,20,gc9a01.BLACK,bgcolor)while True:msg = uart.read()ret = GPS(msg)pos = 40for item in ret:if not item is "":tft.text(font,item,80,pos,gc9a01.BLACK,bgcolor)pos += 20tft.fill_rect(88,80,24,40, gc9a01.GREEN)time.sleep(0.5)
0 件のコメント:
コメントを投稿