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)  ,也可一使用串口测试工具先测试完成。

image

 

 

 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 配置一个任务,我的代码如下:

image

 

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 

posted @ 2025-09-15 15:26  Janus2003  阅读(79)  评论(0)    收藏  举报