完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
STM3+2+1对接阿里飞燕平台-ESP-0连接
技术和计算机信息,并伴随微电子技术的高速发展,与消费技术应运而生,万物互联。 WIFI的模块都已装载接入模块蓝牙控制,让它们能够智能控制互联互通,或者连接模块可以联网,因此,WIFI的应用接入点也可以远程控制产品开发者的产品卖点。由于IPv4地址的 资源,通过本地网关技术的一般设备与外部IP网络直接连接,IP网络不能直接通过NAT进行映射,从而实现远程连接中的最佳连接解决方案。通过腾讯的智能互联网互联网公司平台推出自己的智能网络平台,推出 智能手机平台。由于影响力,我们就以飞燕平台系统来查看如何通过物联网平台进行不同的WIFI设备到服务器再到手机终端的连接,开发物联网产品。采用 硬件平台的讨论应用合作程序也存在很大差异,合作前我们要先确定需要采用硬件平台,比如今天我们讨论的是基于STM3+ESP-01S WIFI模组的配置,但由于ESP-01S只是原始芯片不支持MQTT,所以业务逻辑控制以及MQTT协议要在MCU之外运行。连接示例如下: 飞燕平台是基于MQTT的,所以这里我们先来了解一下MQTT协议,根据网络协议协议如下: MQTT(协议消息标准遥测传输消息)是ISO(ISO/IEC PRF 20922)下基于发布格式/订阅格式的性能。它是基于TCP/IP的协议簇的应用层协议,是为硬件低下远程的设备以及网络状况坏消息和消息的发布/订阅协议。基于类型的客户端-服务器的发布/传输协议。MQTT 是轻量级、简单的协议、MQ 的开放式和轻松的订阅协议,这些特点是轻量级、简单、开放的 TT 和轻松实现的,这些特点适用于各种情况下,非常适用于:在智能环境中,如(M2)和物联网(M2)通过互联传感器、互联设备与医疗设备。阿里家居为了方便用户使用小型化飞燕 平台的繁杂及语言程序,提供各种广泛的SDK开发、解压、展开时 广泛使用。 bat文件,会弹出一个选择模块的配置界面如下: 通过左右方向键选择光标,空格键选择和移动选项,我们上下选择下面的选项
#define LINK_ID_MAX 5 typedef struct link_s { int fd; } 链接_t; 静态链接_t g_link[LINK_ID_MAX]; int HAL_AT_CONN_Init(void) { int link; memset(g_link, 0, sizeof(g_link)); for (link = 0; link < LINK_ID_MAX; link++) { g_link[link].fd = -1; } 字符 cmd0[64] = {0}; 字符输出0[64] = {0}; //选择模式1.Station 2.AP 3.AP+Station HAL_Snprintf(cmd0, sizeof(cmd0), "AT+CWMODE=%drn",3); if(at_send_cmd_wait_reply(cmd0,sizeof(cmd0),out0,sizeof(out0),”rn”,”OKrn”,6000) < 0) { at_conn_hal_debug(“%s %d 失败”, __func__, __LINE__); 返回-1; } //选择破坏连接模式 (WIFIHAL_Snprintfcmd0, sizeof(cmd0), "AT+CWQAPrn"); if(at_send_cmd_wait_reply(cmd0,sizeof(cmd0),out0,sizeof(out0),"rn","OKrn",6000) < 0) { at_conn_hal_debug("%s %d failed" ;, __func__, __LINE__); 返回-1; } //选择模式连接WIFI,SSID:WIFISSID 密码:WIFIPassword HAL_Snprintf(cmd0, sizeof(cmd0), "AT+CWJAP="%s","%s"rn" ;,“WIFISSID”, if(at_send_cmd_wait_reply(cmd0,sizeof(cmd0),out0,sizeof(out0),"rn","OKrn",6000) < 0) { at_conn_hal_debug("%s %d failed" ;, __func__, __LINE__); 返回-1; } 初始化 = 真; 返回0; } HAL_AT_CONN_Deinit int HAL_AT_CONN_Deinit(void) { if (!inited) { return 0; } 初始化 = 假; 返回0; } HAL_AT_CONN_开始 int HAL_AT_CONN_Start(at_conn_t *c) { char cmd0[128] = {0}; 字符输出0[128] = {0}; //选择TCP连接模式为多连接 HAL_Snprintf(cmd0, sizeof(cmd0), "AT+CIPMUX=%drn",1); if(at_send_cmd_wait_reply(cmd0,sizeof(cmd0),out0,sizeof(out0),"rn","OKrn",6000) < 0) { at_conn_hal_debug("%s %d failed" ;, __func__, __LINE__); 返回-1; } int link_id; for (link_id = 0; link_id < LINK_ID_MAX; link_id++) { if (g_link[link_id].fd > } else { g_link[link_id].fd = conn->fd; 休息; } } //建立TCP连接 HAL_Snprintf(cmd0, sizeof(cmd0), "AT+CIPSTART=%d,"%s","%s",%drn" ,link_id,”TCP”,conn->addr,conn->r_port); if(at_send_cmd_wait_reply(cmd0,sizeof(cmd0),out0,sizeof(out0),"rn","OKrn",300) < 0) { at_conn_hal_debug("%s %d failed" ;, __func__, __LINE__); 返回-1; } 返回 (int)0; HAL_AT_CONN_Close int HAL_AT_CONN_Close(int fd, int32_t remote_port) { int link_id; link_id = fd_to_linkid(fd); if(link_id < 0 || link_id >= LINK_ID_MAX) { at_conn_hal_debug("No connection found for fd (%d) in %s in %s", fd, __func__, __LINE__); 返回-1; } 字符 cmd0[64] = {0}; 字符输出0[64] = {0}; //关闭TCP连接 HAL_Snprintf(cmd0, sizeof(cmd0), "AT+CIPCLOSE=%drn",link_id); if(at_send_cmd_wait_reply(cmd0,sizeof(cmd0),out0,sizeof(out0),”rn”,”OKrn”,6000) < 0) { //at_conn_hal_debug("%s %d failed", __func__, __LINE__); //返回-1; } g_link[link_id].fd = -1; 返回0; } HAL_AT_CONN_Send int HAL_AT_CONN_Send(int fd, uint8_t *data, uint32_t len, char remote_ip[16], int32_t remote_port, int32_t timeout) { int link_id; 如果(!数据) { 返回-1; } link_id = fd_to_linkid(fd); if (link_id < 0 || link_id >= LINK_ID_MAX) { at_conn_hal_debug("No connection found for fd (%d) in %s in %s", fd, __func__, __LINE__); 返回-1; } 字符 cmd0[64] = {0}; 字符输出0[64] = {0}; //设置发送数据到连接link_id,数据长度为len HAL_Snprintf(cmd0, sizeof(cmd0), "AT+CIPSEND=%d,%drn",link_id,len); if(at_send_cmd_wait_reply(cmd0,sizeof(cmd0),out0,sizeof(out0),"rn","OKrn",300) < 0) { at_conn_hal_debug("%s %d failed" ;, __func__, __LINE__); 返回-1; } //开始发送数据 if(at_send_data_wait_reply(data,len,out0,sizeof(out0),">","OKrn",6000) < 0) { at_conn_hal_debug("%s %d失败”,__func__,__LINE__); 返回-1; HAL_SleepMs(5000); 字符前缀[64] = {0}; HAL_Snprintf(Prefix, sizeof(Prefix), "+IPD,%d,",link_id); //等待回复 if (at_yield(out0, sizeof(out0), Prefix, ":", AT_UART_TIMEOUT_MS) < 0) { return -1; } 字符 mqtt_reply[256] = {0}; 字符 c = NULL; int num = atoi(out0); for(int i=0;i < num;i++) { // 抓取回复到mqtt_reply if (at_getc(&c,timeout) != 0) { return -1; } mqtt_reply= c; } 结构 at_conn_input 参数; 如果 (g_link[link_id].fd >= 0) { param.fd = g_link[link_id].fd; 参数.data = mqtt_reply; 参数.datalen = 数; 参数.remote_ip = NULL; 参数.remote_port = 0; //将接收到的数据上传给MQTT协议上层 if (IOT_ATM_Input(¶m) != 0) { at_conn_hal_debug(" %s socket %d get data len %d failed to post to at_conn, drop itn",__func__ , g_link[link_id].fd, len); } } 返回 (int)0; } HAL_AT_CONN_DomainToIp int HAL_AT_CONN_DomainToIp(char *domain, char ip[16]) { char cmd0[128] = {0}; 字符输出0[128] = {0}; //根据域名获取IP地址 HAL_Snprintf(cmd0, sizeof(cmd0), "AT+CIPDOMAIN="%s"rn",domain); if(at_send_cmd_wait_reply(cmd0,sizeof(cmd0),out0,sizeof(out0),"+CIPDOMAIN:","rn",6000) < 0) { at_conn_hal_debug("%s %d failed"; , __func__, __LINE__); 返回-1; } for(int i=0;i < 16;i++) { ip = out0 ; } at_conn_hal_debug("IP->%s", ip); 返回0; 上面的程序都是在测试阶段编写的,比较随意,有不足之处批评。正 设备端程序完善后我们可以在阿里飞燕平台上进行调试,然后我们就可以按照自己的习惯进行修改了。 Topic中的get类为发布和订阅,因为在mqtt_example_at.c的例子中采用发布这个Topic来实现订阅。 最后我们就可以启动程序来进行飞燕平台的连接了。如果应用mqtt_example_at.c调试例子,我们需要把mtt_example_at修改为一个名字。 |
|
|
|
只有小组成员才能发言,加入小组>>
3280 浏览 9 评论
2958 浏览 16 评论
3460 浏览 1 评论
9005 浏览 16 评论
4052 浏览 18 评论
1118浏览 3评论
575浏览 2评论
const uint16_t Tab[10]={0}; const uint16_t *p; p = Tab;//报错是怎么回事?
571浏览 2评论
用NUC131单片机UART3作为打印口,但printf没有输出东西是什么原因?
2304浏览 2评论
NUC980DK61YC启动随机性出现Err-DDR是为什么?
1860浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-26 21:25 , Processed in 1.175704 second(s), Total 81, Slave 61 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号