由 黎明将至! 贡献,Ai-Thinker 进行整理
Ai-WB2-32S MQTT TCP使用
前言
本期博客来介绍一下关于mqtt中tcp的demo的使用。
一、使用步骤
第一步 进入mqtt/tcp目录
cd ~/Ai-Thinker-WB2/applications/protocols/mqtt/tcp
第二步 修改main.c文件内容
gedit ./tcp/main.c

📜 点击展开完整代码
c
#
include
<FreeRTOS.h>
#
include
<task.h>
#
include
<stdio.h>
#
include
<string.h>
#
include
"blog.h"
#
include
<aos/yloop.h>
#
include
<aos/kernel.h>
#
include
<lwip/tcpip.h>
#
include
<wifi_mgmr_ext.h>
#
include
<hal_wifi.h>
#
define
ROUTER_SSID
"1234567"
//自行修改WiFi名称
#
define
ROUTER_PWD
"202013076"
//自行修改WiFi密码
static
wifi_conf_t
conf =
{
.country_code =
"CN"
,
};
static
void
wifi_sta_connect
(
char
* ssid,
char
* password)
{
wifi_interface_t
wifi_interface;
wifi_interface = wifi_mgmr_sta_enable();
wifi_mgmr_sta_connect(wifi_interface, ssid, password,
NULL
,
NULL
,
0
,
0
);
}
static
void
event_cb_wifi_event
(
input_event_t
* event,
void
* private_data)
{
switch
(event->code)
{
case
CODE_WIFI_ON_INIT_DONE:
{
blog_info(
"[APP] [EVT] INIT DONE %lld"
, aos_now_ms());
wifi_mgmr_start_background(&conf);
}
break
;
case
CODE_WIFI_ON_MGMR_DONE:
{
blog_info(
"[APP] [EVT] MGMR DONE %lld"
, aos_now_ms());
wifi_sta_connect(ROUTER_SSID, ROUTER_PWD);
}
break
;
case
CODE_WIFI_ON_SCAN_DONE:
{
blog_info(
"[APP] [EVT] SCAN Done %lld"
, aos_now_ms());
}
break
;
case
CODE_WIFI_ON_DISCONNECT:
{
blog_info(
"[APP] [EVT] disconnect %lld"
, aos_now_ms());
}
break
;
case
CODE_WIFI_ON_CONNECTING:
{
blog_info(
"[APP] [EVT] Connecting %lld"
, aos_now_ms());
}
break
;
case
CODE_WIFI_CMD_RECONNECT:
{
blog_info(
"[APP] [EVT] Reconnect %lld"
, aos_now_ms());
}
break
;
case
CODE_WIFI_ON_CONNECTED:
{
blog_info(
"[APP] [EVT] connected %lld"
, aos_now_ms());
}
break
;
case
CODE_WIFI_ON_PRE_GOT_IP:
{
blog_info(
"[APP] [EVT] connected %lld"
, aos_now_ms());
}
break
;
case
CODE_WIFI_ON_GOT_IP:
{
blog_info(
"[APP] [EVT] GOT IP %lld"
, aos_now_ms());
blog_info(
"[SYS] Memory left is %d Bytes"
, xPortGetFreeHeapSize());
extern
void
mqtt_start
(
void
)
;
mqtt_start();
}
break
;
case
CODE_WIFI_ON_PROV_SSID:
break
;
case
CODE_WIFI_ON_PROV_BSSID:
{
blog_info(
"[APP] [EVT] [PROV] [BSSID] %lld: %s"
,
aos_now_ms(),
event->value ? (
const
char
*)event->value :
"UNKNOWN"
);
if
(event->value)
{
vPortFree((
void
*)event->value);
}
}
break
;
case
CODE_WIFI_ON_PROV_PASSWD:
break
;
case
CODE_WIFI_ON_PROV_CONNECT:
break
;
case
CODE_WIFI_ON_PROV_DISCONNECT:
{
blog_info(
"[APP] [EVT] [PROV] [DISCONNECT] %lld"
, aos_now_ms());
}
break
;
default
:
{
blog_info(
"[APP] [EVT] Unknown code %u, %lld"
, event->code, aos_now_ms());
/*nothing*/
}
}
}
static
void
proc_main_entry
(
void
* pvParameters)
{
aos_register_event_filter(EV_WIFI, event_cb_wifi_event,
NULL
);
hal_wifi_start_firmware_task();
aos_post_event(EV_WIFI, CODE_WIFI_ON_INIT_DONE,
0
);
vTaskDelete(
NULL
);
}
void
main
()
{
blog_set_level_log_component(BLOG_LEVEL_WARN,
"tcp"
);
blog_set_level_log_component(BLOG_LEVEL_WARN,
"axk_mqtt"
);
blog_set_level_log_component(BLOG_LEVEL_WARN,
"tcp_transport"
);
puts
(
"[OS] Starting TCP/IP Stack..."
);
tcpip_init(
NULL
,
NULL
);
puts
(
"[OS] proc_main_entry task..."
);
xTaskCreate(proc_main_entry, (
char
*)
"main_entry"
,
1024
,
NULL
,
15
,
NULL
);
}第三步 修改demo.c文件内容
gedit ./tcp/demo.c


第四步 修改另一个客户端的订阅和发布

二、编译与烧录
第一步 编译
执行make -j8(这里-j8是要参与编译的内核的总数量)


第二步 烧录
将模组连接到电脑上 之后将模组连接到虚拟机上,如下图位置可选择连接

之后执行make flash p=/dev/ttyUSB0 b=115200

跟着提示按下模组的RST键




三、查看运行效果
第一步 断开模组与虚拟机的连接

第二步 打开串口调试助手并连接模组的串口


第三步 重新按下模组的RST键



第四步 查看另一个客户端并发布topic

第五步 查看串口调试助手是否接收到客户端发来的消息

原链接:<https://blog.csdn.net/qq_54193285/article/details/136107369?spm=1001.2014.3001.5501>

