ESP32-S3 与GPS北斗通信返回定位/海拔/速度数据的测试代码
1.设备选用了银尔达企业店的 M100PG(DTU固件)贴片卡-单北斗模块
https://item.taobao.com/item.htm?id=718803061339&mi_id=0000qaxoKpzXrjCqKjNVBO442w3_i_Vz_sY6iyO-vASV8-s&spm=tbpc.boughtlist.suborder_itempic.d718803061339.67002e8dTIrFEQ&sku_properties=-5%3A-13%3B-1%3A-14
2.我ESP32-S3代码如下(语言ardoino) ,也可一使用串口测试工具先测试完成。

platformio.ini
[env:adafruit_feather_esp32s3] platform = espressif32 board = adafruit_feather_esp32s3 framework = arduino monitor_speed=115200 build_flags= -DARDUINO_USB_CDC_ON_BOOT=0
main.cpp
#include <Arduino.h> #include <HardwareSerial.h> // 定义使用的串口 #define SERIAL1_RX_PIN 9// 根据您的ESP32开发板调整 #define SERIAL1_TX_PIN 10 // 根据您的ESP32开发板调整 // 全局变量 HardwareSerial S1(1); // 使用串口1 String inputString = ""; // 存储接收到的数据 int iiiiii=0; bool stringComplete = false; // 是否接收到完整字符串 bool hightled=false; void setup() { // 初始化串口0(用于调试) Serial.begin(115200); pinMode(4, OUTPUT); // 初始化串口1(用于外部通信) S1.begin(115200, SERIAL_8N1, SERIAL1_RX_PIN, SERIAL1_TX_PIN); // S1.onReceive(sireceive); // 等待串口初始化完成 delay(1000); Serial.println("ESP32 Serial Communication Example"); Serial.println("Type a message and press Enter to send via Serial1"); Serial.println("Messages received on Serial1 will be displayed here"); } void loop() { iiiiii=iiiiii+1; hightled=!hightled; Serial.print("Sent: "); if (Serial.available()) { char inChar = (char)Serial.read(); Serial.println( ":-4444---------------------------------------------"); // 如果收到换行符,则认为输入完成 if (inChar == '\n') { // 通过串口1发送数据 S1.println(inputString); Serial.print("Sent: "); Serial.println(inputString); S1.println("config,get,lbsloc"); // 清空输入字符串 inputString = ""; stringComplete = false; } else { // 将字符添加到输入字符串 inputString += inChar; } } // 检查串口1是否有数据返回 if (S1.available()) { String response = S1.readStringUntil('\n'); Serial.print("Received: "); Serial.println(response); } if (hightled) {digitalWrite(4, HIGH); }else {digitalWrite(4, LOW); } // delay(500); // digitalWrite(4, LOW); // 短暂延迟以减少CPU使用率 delay(1000); }
3.如果只返回精度维度的数据直接与DTU串口通信即可,如果还需要返回海拔/速度数据需要再 DTU配置平台:https://dtu.yinerda.com 配置一个任务,我的代码如下:

function
sys.wait(15000)
local taskname="userTask"
log.info(taskname,"start")
local nid=1
local uid=1
local netsta =0
while true do
local d ={}
d.datetime=os.date("%Y-%m-%d %H:%M:%S")
d.csq=mobile.csq()
d.imei=mobile.imei()
d.iccid = PerGetIccid()
d.vbatt=PerGetVbattV()
d.gps={}
d.gps.isFix=libgnss.isFix()
if libgnss.isFix() then
local tg =libgnss.getRmc(2)
local ga =libgnss.getGga(2)
d.gps.lat=tg.lat
d.gps.lng=tg.lng
d.gps.speed=tg.speed --速度
d.gps.altitude=ga.altitude --海拔
local t = {year=tg.year,month=tg.month,day=tg.day,hour=tg.hour,min=tg.min,sec=tg.sec} --GPS TIME
d.gps.gpstime=os.date("%Y-%m-%d %H:%M:%S",os.time(t))
d.gps.variation=tg.variation --航向
end
LbsCheckLbs()
d.lbs={}
d.lbs.lbslat,d.lbs.lbslng = GetLbs()
local updata = json.encode(d)
local netsta = PronetGetNetSta(nid)
log.info(taskname,"updata",updata,"netsta",netsta)
if updata and netsta ==1 then
UartSetSendCh(nid,updata)
end
sys.wait(10000)
end
end
以上分享不足之处请留言,欢迎分享,大家共同进步!感谢!Janus / 2025-09-15

浙公网安备 33010602011771号