首先选用的单片机为stm32c8t6,协议为EDP协议
gps模块为sim868,其中用串口1打印出sim868的数据来调试
主要注意需要将sim868传的数据通过strtok分割然后将字符串转化为浮点型
sim868代码
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43#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初始化
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28void 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中数据流名一样
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25unsigned 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); }
主函数
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25int 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经度与维度内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复