Hi3861作為AP模式(參考步驟一修改BUILD),可以使用手機(jī)連接開(kāi)發(fā)板AP,可以在wifi_hotspot_demo.c文件中修改開(kāi)發(fā)板AP的名稱和passward。

??想了解更多關(guān)于開(kāi)源的內(nèi)容,請(qǐng)?jiān)L問(wèn):??
??51CTO 開(kāi)源基礎(chǔ)軟件社區(qū)??
??https://ost.51cto.com??
一、無(wú)線通信
1、Wifi
(1)STA /AP 相關(guān)函數(shù)
主要學(xué)習(xí)Hi3861V100的STA和AP模式。常用接口函數(shù)如下:
// STA 模式
1.定義: int ConnectToHotspot(WifiDeviceConfig* apConfig);
功能: 連接WiFi
參數(shù): WiFi相關(guān)參數(shù)比如SSID,passward
返回值: 1:成功
依賴: //foundation/communication/wifi_lite/interfaces/wifiservice
2.定義: void DisconnectWithHotspot(int netId);
**功能: 斷開(kāi)WiFi
參數(shù): WiFi對(duì)應(yīng)的netId
**返回值: 無(wú)
依賴: //foundation/communication/wifi_lite/interfaces/wifiservic
// AP模式
1.定義: int StartHotspot(const HotspotConfig* config);
功能: 開(kāi)啟AP
參數(shù): AP參數(shù)包括:IP地址,默認(rèn)網(wǎng)關(guān),子網(wǎng)掩碼
**返回值: 0:成功
依賴: //foundation/communication/wifi_lite/interfaces/wifiservice
2.定義: void StopHotspot(void);
功能: 斷開(kāi)AP
參數(shù): 無(wú)
返回值: 無(wú)
依賴: //foundation/communication/wifi_lite/interfaces/wifiservice
(2)STA\AP demo運(yùn)行
- 硬件準(zhǔn)備: 一塊開(kāi)發(fā)板、可開(kāi)啟熱點(diǎn)的手機(jī)。
第一步,將已有demo移動(dòng)到app目錄下:
- 將hi3861_hdu_iot_application/src/vendor/hisilicon/hispark_pegasus/demo/wifi_demo
文件夾復(fù)制到hi3861_hdu_iot_application/src/applications/sample/wifi-iot/app/目錄下。 - 修改applications/sample/wifi-iot/app/ wifi_demo/目錄下的BUILD.gn,如果使用STA模式,將"wifi_starter.c"和"wifi_hotspot_demo.c"使用#注釋,如果使用。
AP模式,將"wifi_connecter.c"和"wifi_connect_demo.c"使用#注釋(同時(shí)只能使用一種模式),如下示例使用AP模式:
static_library("wifi_control") {
sources = [
#"wifi_connecter.c",
"wifi_starter.c",
#"wifi_connect_demo.c",
"wifi_hotspot_demo.c",
]
第二步,修改applications/sample/wifi-iot/app/目錄下的BUILD.gn,,在features字段中添加wifi_demo: wifi_control。
import("http://build/lite/config/component/lite_component.gni")
lite_component("app") {
features = [ "wifi_demo:wifi_control", ]
}
第三步,步驟四:Hi3861V100作為STA模式(參考步驟2修改文件實(shí)現(xiàn)demo功能),使用開(kāi)發(fā)板連接手機(jī)熱點(diǎn),可以在wifi_connect_demo.c修改熱點(diǎn)名稱和passward(注意:只支持4G網(wǎng)絡(luò)),源碼中的demo wifi名:“H”,passward:“12345678”,代碼如下所示:
static void WifiConnectTask(void)
{
osDelay(10); /* 10 = 100ms */
// setup your AP params
WifiDeviceConfig apConfig = { 0 };
strcpy(apConfig.ssid, "H"); // 設(shè)置wifi ssid "h" Set wifi ssid
strcpy(apConfig.preSharedKey, "12345678"); // 設(shè)置wifi passward "12345678" Set wifi password
apConfig.securityType = WIFI_SEC_TYPE_PSK;
int netId = ConnectToHotspot(&apConfig);
int timeout = 60;
while (timeout--) {
printf("After %d seconds I will disconnect with AP!\r\n", timeout);
/* 100相當(dāng)于1s,60后WiFi斷開(kāi) */
/* 100 is equivalent to 1s, and the WiFi will be disconnected after 60 */
osDelay(100);
}
DisconnectWithHotspot(netId);
}
編譯運(yùn)行之后,設(shè)置熱點(diǎn)H,passward12345678,復(fù)位開(kāi)發(fā)板,打開(kāi)串口調(diào)試Monitor后,可以看到開(kāi)發(fā)板已經(jīng)連接到手機(jī)上。

Hi3861作為AP模式(參考步驟一修改BUILD),可以使用手機(jī)連接開(kāi)發(fā)板AP,可以在wifi_hotspot_demo.c文件中修改開(kāi)發(fā)板AP的名稱和passward。demo AP名稱:“HiSpark-AP”,passward為:“12345678”,代碼如下所示。
#include "wifi_starter.h"
static void WifiHotspotTask(void)
{
WifiErrorCode errCode;
HotspotConfig config = { 0 };
// 設(shè)置AP的配置參數(shù) set configuration parameters for AP
strcpy(config.ssid, "HiSpark-AP"); // AP :HiSpark-AP
strcpy(config.preSharedKey, "12345678"); // Password:12345678
config.securityType = WIFI_SEC_TYPE_PSK;
config.band = HOTSPOT_BAND_TYPE_2G;
config.channelNum = 7; /* 通道7 Channel 7 */
osDelay(10); /* 10 = 100ms */
printf("starting AP ...\r\n");
errCode = StartHotspot(&config);
printf("StartHotspot: %d\r\n", errCode);
int timeout = 60; /* 60 = 1 minute */
while (timeout--) {
printf("After %d seconds Ap will turn off!\r\n", timeout);
osDelay(100); /* 100 = 1s */
}
printf("stop AP ...\r\n");
StopHotspot();
printf("stop AP ...\r\n");
osDelay(10); /* 10 = 100ms */
}
編譯運(yùn)行之后,手機(jī)上可以看到HiSpark的無(wú)線網(wǎng)絡(luò),點(diǎn)擊后輸入passward即可連接,串口可以看到連接信息。

2、MQTT
(1)bearpi MQTT使用
mqtt目前已經(jīng)移植到了OpenHarmony中,在源碼vendor目錄下bearpi、hihope等公司均有相應(yīng)的應(yīng)用demo。這里我先說(shuō)如何使用bearpi的mqtt。
- 第一步,拷貝src\vendor\bearpi\bearpi_hm_nano\demo\D5_iot_mqtt文件夾到src\applications\sample\wifi-iot\app\下,該目錄(D5_iot_mqtt).
- 第二步,修改app目錄下的BUILD.gn,讓該工程參與編譯,如下:
import("http://build/lite/config/component/lite_component.gni")
lite_component("app") {
features = [
# "startup",
# "iothardware:led_example",
# iothardware指的是工程目錄
# :led_example指的是工程生成的靜態(tài)庫(kù)/文件
# "wifi_demo:wifi_control",
"D5_iot_mqtt:iot_mqtt",
]
}
- 第三步,打開(kāi)src\applications\sample\wifi-iot\app\D5_iot_mqtt\iot_mqtt.c文件,修改我們要連接的mqtt服務(wù)器(這里可以使用我的服務(wù)器120.55.170.12)也可以使用mqtt調(diào)試工具EMQX調(diào)試。連接的熱點(diǎn)我們改為H passward為12345678。
static void MQTTDemoTask(void)
{
WifiConnect("H", "12345678");
printf("Starting ...\n");
int rc, count = 0;
MQTTClient client;
- 第四步,如果使用我的服務(wù)器調(diào)試,那么對(duì)應(yīng)的topic需要修改,如下:
printf("MQTTSubscribe ...\n");
// 下面這行 "substopic" 修改為 "web_fan_btn"
rc = MQTTSubscribe(&client, "web_fan_btn", MQTT_QOS, messageArrived);
if (rc != 0) {
printf("MQTTSubscribe: %d\n", rc);
osDelay(MQTT_DELAY_2S);
}
····
·····
message.payloadlen = strlen(payload);
// 下面這行 "pubtopic" 修改為 "fan"
if ((rc = MQTTPublish(&client, "fan", &message)) != 0) {
printf("Return code from MQTT publish is %d\n", rc);
NetworkDisconnect(&network);
MQTTDisconnect(&client);
}
osDelay(MQTT_DELAY_500_MS);
}
}
static void MQTTDemo(void)
如果自己設(shè)定的mqtt服務(wù)器,需要約定好topic。編譯運(yùn)行后,測(cè)試如下圖所示,點(diǎn)擊風(fēng)扇按鈕,開(kāi)發(fā)板可以接收到發(fā)送過(guò)來(lái)的數(shù)據(jù)。


(2)hihope MQTT使用
這個(gè)已經(jīng)有詳細(xì)教程,可參考連老師文章,https://ost.51cto.com/posts/10201。
??想了解更多關(guān)于開(kāi)源的內(nèi)容,請(qǐng)?jiān)L問(wèn):??
??51CTO 開(kāi)源基礎(chǔ)軟件社區(qū)??
??https://ost.51cto.com??