概述
首先选用的单片机为stm32c8t6,协议为EDP协议
gps模块为sim868,其中用串口1打印出sim868的数据来调试
主要注意需要将sim868传的数据通过strtok分割然后将字符串转化为浮点型
sim868代码
#include "sim868.h"
extern char Uart2_Buf[200];
//sim868初始化函数
char *p1,*p2;
GPS gps;
void sim868_gps_init(void)
{
CLR_Buf2();
UART2_SendString("AT+CGNSPWR=1rn");
Delay_ms(1000);
CLR_Buf2();
UART2_SendString("AT+CGNSINFrn");
Delay_ms(1000);
UART1_SendString(Uart2_Buf);
if((p1=(char*)strstr((const char*)Uart2_Buf,"CGNSINF:")),(p1!=NULL))//寻找开始符
{
if((p2=(char*)strstr((const char*)p1,"OK")),(p2!=NULL))//寻找结束符
//if((p2=(char*)strstr((const char*)Uart2_Buf,"OK")),(p2!=NULL))//寻找结束符
{
*p2=0;//添加结束符
//p2=strtok((Uart2_Buf),",");
p2=strtok((p1),",");
p2=(char*)strtok(NULL,",");
p2=(char*)strtok(NULL,",");
p2=(char*)strtok(NULL,",");
gps.lon=atof(p2);//将字符串转化为浮点型
//UART1_SendString((char *) gps.lon);UART1_SendString("n");
p2=(char*)strtok(NULL,",");
gps.lat=atof(p2);
//UART1_SendString((char *) gps.lat);UART1_SendString("n");
CLR_Buf2();
}
}
}
与onenet通信的模块为ESP8266
ESP8266初始化
void ESP8266_Init(void)
{
ESP8266_Clear();
//UsartPrintf(USART_DEBUG, "1. ATrn");
while(ESP8266_SendCmd("ATrn", "OK"))
Delay_ms(500);
//UsartPrintf(USART_DEBUG, "2. CWMODErn");
while(ESP8266_SendCmd("AT+CWMODE=1rn", "OK"))
Delay_ms(500);
//UsartPrintf(USART_DEBUG, "3. AT+CWDHCPrn");
while(ESP8266_SendCmd("AT+CWDHCP=1,1rn", "OK"))
Delay_ms(500);
//UsartPrintf(USART_DEBUG, "4. CWJAPrn");
while(ESP8266_SendCmd(ESP8266_WIFI_INFO, "GOT IP"))//此处为WIFI信息
Delay_ms(500);
//UsartPrintf(USART_DEBUG, "5. CIPSTARTrn");
while(ESP8266_SendCmd(ESP8266_ONENET_INFO, "CONNECT"))//服务器信息,官网查找
Delay_ms(500);
//UsartPrintf(USART_DEBUG, "6. ESP8266 Init OKrn");
}
与onenet通信
有需要就改成自己的变量名,前面的变量命需要和onenet中数据流名一样
unsigned char OneNet_FillBuf(char *buf)
{
char text[32];
memset(text, 0, sizeof(text));
strcpy(buf, ",;");
memset(text, 0, sizeof(text));
sprintf(text, "lon,%f;", gps.lon);
strcat(buf, text);
memset(text, 0, sizeof(text));
sprintf(text, "lat,%f;", gps.lat);
strcat(buf, text);
return strlen(buf);
}
主函数
int main(void)
{
/* 配置SysTick 为10us中断一次 */
SysTick_Init();
/* LED 端口初始化 */
LED_GPIO_Config();
USART1_Init_Config(115200); //调试用
USART2_Init_Config(9600); //串口2,sim868
Usart3_Init(115200); //串口3,驱动ESP8266用
ESP8266_Init(); //初始化ESP8266
sim868_gps_init();
while(OneNet_DevLink()) //接入OneNET
Delay_ms(500);
while(1)
{
Keep_Connet_Esp8266 ();
}
关于EDP协议的代码可以在onenet官网的文档自行下载
httpaxada.iot.10086.cn/bbs/thread-863-1-1.html
最后效果
如果有人知道直接上传gps,请留言告诉我,谢谢
最后
以上就是着急星星为你收集整理的stm32c8t6通过onenet上传gps经度与维度的全部内容,希望文章能够帮你解决stm32c8t6通过onenet上传gps经度与维度所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复