草庐IT

无线通信:WIFI、MQTT 开发例程

Hello_Kun 2023-04-13 原文

想了解更多关于开源的内容,请访问:

​51CTO 开源基础软件社区​

​https://ost.51cto.com​

一、无线通信

1、Wifi

(1)STA /AP 相关函数

主要学习Hi3861V100的STA和AP模式。常用接口函数如下:

// STA 模式
1.定义: int ConnectToHotspot(WifiDeviceConfig* apConfig);
功能: 连接WiFi
参数: WiFi相关参数比如SSID,passward
返回值: 1:成功
依赖: //foundation/communication/wifi_lite/interfaces/wifiservice
2.定义: void DisconnectWithHotspot(int netId);
**功能: 断开WiFi
参数: WiFi对应的netId
**返回值:
依赖: //foundation/communication/wifi_lite/interfaces/wifiservic

// AP模式
1.定义: int StartHotspot(const HotspotConfig* config);
功能: 开启AP
参数: AP参数包括:IP地址,默认网关,子网掩码
**返回值: 0:成功
依赖: //foundation/communication/wifi_lite/interfaces/wifiservice
2.定义: void StopHotspot(void);
功能: 断开AP
参数:
返回值:
依赖: //foundation/communication/wifi_lite/interfaces/wifiservice

(2)STA\AP demo运行

  • 硬件准备: 一块开发板、可开启热点的手机。

第一步,将已有demo移动到app目录下:

  • 将hi3861_hdu_iot_application/src/vendor/hisilicon/hispark_pegasus/demo/wifi_demo
    文件夹复制到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"使用#注释(同时只能使用一种模式),如下示例使用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("//build/lite/config/component/lite_component.gni")
lite_component("app") {
features = [ "wifi_demo:wifi_control", ]
}

第三步,步骤四:Hi3861V100作为STA模式(参考步骤2修改文件实现demo功能),使用开发板连接手机热点,可以在wifi_connect_demo.c修改热点名称和passward(注意:只支持4G网络),源码中的demo wifi名:“H”,passward:“12345678”,代码如下所示:

static void WifiConnectTask(void)
{
osDelay(10); /* 10 = 100ms */
// setup your AP params
WifiDeviceConfig apConfig = { 0 };
strcpy(apConfig.ssid, "H"); // 设置wifi ssid "h" Set wifi ssid
strcpy(apConfig.preSharedKey, "12345678"); // 设置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相当于1s,60后WiFi断开 */
/* 100 is equivalent to 1s, and the WiFi will be disconnected after 60 */
osDelay(100);
}
DisconnectWithHotspot(netId);
}

编译运行之后,设置热点H,passward12345678,复位开发板,打开串口调试Monitor后,可以看到开发板已经连接到手机上。

Hi3861作为AP模式(参考步骤一修改BUILD),可以使用手机连接开发板AP,可以在wifi_hotspot_demo.c文件中修改开发板AP的名称和passward。demo AP名称:“HiSpark-AP”,passward为:“12345678”,代码如下所示。

#include "wifi_starter.h"

static void WifiHotspotTask(void)
{
WifiErrorCode errCode;
HotspotConfig config = { 0 };

// 设置AP的配置参数 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 */
}

编译运行之后,手机上可以看到HiSpark的无线网络,点击后输入passward即可连接,串口可以看到连接信息。

2、MQTT

(1)bearpi MQTT使用

mqtt目前已经移植到了OpenHarmony中,在源码vendor目录下bearpi、hihope等公司均有相应的应用demo。这里我先说如何使用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("//build/lite/config/component/lite_component.gni")
lite_component("app") {
features = [
# "startup",
# "iothardware:led_example",
# iothardware指的是工程目录
# :led_example指的是工程生成的静态库/文件
# "wifi_demo:wifi_control",
"D5_iot_mqtt:iot_mqtt",
]
}
  • 第三步,打开src\applications\sample\wifi-iot\app\D5_iot_mqtt\iot_mqtt.c文件,修改我们要连接的mqtt服务器(这里可以使用我的服务器120.55.170.12)也可以使用mqtt调试工具EMQX调试。连接的热点我们改为H passward为12345678。
static void MQTTDemoTask(void)
{
WifiConnect("H", "12345678");
printf("Starting ...\n");
int rc, count = 0;
MQTTClient client;
  • 第四步,如果使用我的服务器调试,那么对应的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)

如果自己设定的mqtt服务器,需要约定好topic。编译运行后,测试如下图所示,点击风扇按钮,开发板可以接收到发送过来的数据。

(2)hihope MQTT使用

这个已经有详细教程,可参考连老师文章,https://ost.51cto.com/posts/10201。

想了解更多关于开源的内容,请访问:

​51CTO 开源基础软件社区​

​https://ost.51cto.com​

有关无线通信:WIFI、MQTT 开发例程的更多相关文章

  1. ruby - 使用 C 扩展开发 ruby​​gem 时,如何使用 Rspec 在本地进行测试? - 2

    我正在编写一个包含C扩展的gem。通常当我写一个gem时,我会遵循TDD的过程,我会写一个失败的规范,然后处理代码直到它通过,等等......在“ext/mygem/mygem.c”中我的C扩展和在gemspec的“扩展”中配置的有效extconf.rb,如何运行我的规范并仍然加载我的C扩展?当我更改C代码时,我需要采取哪些步骤来重新编译代码?这可能是个愚蠢的问题,但是从我的gem的开发源代码树中输入“bundleinstall”不会构建任何native扩展。当我手动运行rubyext/mygem/extconf.rb时,我确实得到了一个Makefile(在整个项目的根目录中),然后当

  2. ruby-on-rails - Rails 应用程序之间的通信 - 2

    我构建了两个需要相互通信和发送文件的Rails应用程序。例如,一个Rails应用程序会发送请求以查看其他应用程序数据库中的表。然后另一个应用程序将呈现该表的json并将其发回。我还希望一个应用程序将存储在其公共(public)目录中的文本文件发送到另一个应用程序的公共(public)目录。我从来没有做过这样的事情,所以我什至不知道从哪里开始。任何帮助,将不胜感激。谢谢! 最佳答案 无论Rails是什么,几乎所有Web应用程序都有您的要求,大多数现代Web应用程序都需要相互通信。但是有一个小小的理解需要你坚持下去,网站不应直接访问彼此

  3. Ruby Sinatra 配置用于生产和开发 - 2

    我已经在Sinatra上创建了应用程序,它代表了一个简单的API。我想在生产和开发上进行部署。我想在部署时选择,是开发还是生产,一些方法的逻辑应该改变,这取决于部署类型。是否有任何想法,如何完成以及解决此问题的一些示例。例子:我有代码get'/api/test'doreturn"Itisdev"end但是在部署到生产环境之后我想在运行/api/test之后看到ItisPROD如何实现? 最佳答案 根据SinatraDocumentation:EnvironmentscanbesetthroughtheRACK_ENVenvironm

  4. ruby - 是否可以覆盖 gemfile 进行本地开发? - 2

    我们的git存储库中目前有一个Gemfile。但是,有一个gem我只在我的环境中本地使用(我的团队不使用它)。为了使用它,我必须将它添加到我们的Gemfile中,但每次我checkout到我们的master/dev主分支时,由于与跟踪的gemfile冲突,我必须删除它。我想要的是类似Gemfile.local的东西,它将继承从Gemfile导入的gems,但也允许在那里导入新的gems以供使用只有我的机器。此文件将在.gitignore中被忽略。这可能吗? 最佳答案 设置BUNDLE_GEMFILE环境变量:BUNDLE_GEMFI

  5. ruby - 在 Windows 机器上使用 Ruby 进行开发是否会适得其反? - 2

    这似乎非常适得其反,因为太多的gem会在window上破裂。我一直在处理很多mysql和ruby​​-mysqlgem问题(gem本身发生段错误,一个名为UnixSocket的类显然在Windows机器上不能正常工作,等等)。我只是在浪费时间吗?我应该转向不同的脚本语言吗? 最佳答案 我在Windows上使用Ruby的经验很少,但是当我开始使用Ruby时,我是在Windows上,我的总体印象是它不是Windows原生系统。因此,在主要使用Windows多年之后,开始使用Ruby促使我切换回原来的系统Unix,这次是Linux。Rub

  6. ruby-on-rails - 在 Rails 开发环境中为 .ogv 文件设置 Mime 类型 - 2

    我正在玩HTML5视频并且在ERB中有以下片段:mp4视频从在我的开发环境中运行的服务器很好地流式传输到chrome。然而firefox显示带有海报图像的视频播放器,但带有一个大X。问题似乎是mongrel不确定ogv扩展的mime类型,并且只返回text/plain,如curl所示:$curl-Ihttp://0.0.0.0:3000/pr6.ogvHTTP/1.1200OKConnection:closeDate:Mon,19Apr201012:33:50GMTLast-Modified:Sun,18Apr201012:46:07GMTContent-Type:text/plain

  7. 世界前沿3D开发引擎HOOPS全面讲解——集3D数据读取、3D图形渲染、3D数据发布于一体的全新3D应用开发工具 - 2

    无论您是想搭建桌面端、WEB端或者移动端APP应用,HOOPSPlatform组件都可以为您提供弹性的3D集成架构,同时,由工业领域3D技术专家组成的HOOPS技术团队也能为您提供技术支持服务。如果您的客户期望有一种在多个平台(桌面/WEB/APP,而且某些客户端是“瘦”客户端)快速、方便地将数据接入到3D应用系统的解决方案,并且当访问数据时,在各个平台上的性能和用户体验保持一致,HOOPSPlatform将帮助您完成。利用HOOPSPlatform,您可以开发在任何环境下的3D基础应用架构。HOOPSPlatform可以帮您打造3D创新型产品,HOOPSSDK包含的技术有:快速且准确的CAD

  8. 【鸿蒙应用开发系列】- 获取系统设备信息以及版本API兼容调用方式 - 2

    在应用开发中,有时候我们需要获取系统的设备信息,用于数据上报和行为分析。那在鸿蒙系统中,我们应该怎么去获取设备的系统信息呢,比如说获取手机的系统版本号、手机的制造商、手机型号等数据。1、获取方式这里分为两种情况,一种是设备信息的获取,一种是系统信息的获取。1.1、获取设备信息获取设备信息,鸿蒙的SDK包为我们提供了DeviceInfo类,通过该类的一些静态方法,可以获取设备信息,DeviceInfo类的包路径为:ohos.system.DeviceInfo.具体的方法如下:ModifierandTypeMethodDescriptionstatic StringgetAbiList​()Obt

  9. MIMO-OFDM无线通信技术及MATLAB实现(1)无线信道:传播和衰落 - 2

     MIMO技术的优缺点优点通过下面三个增益来总体概括:阵列增益。阵列增益是指由于接收机通过对接收信号的相干合并而活得的平均SNR的提高。在发射机不知道信道信息的情况下,MIMO系统可以获得的阵列增益与接收天线数成正比复用增益。在采用空间复用方案的MIMO系统中,可以获得复用增益,即信道容量成倍增加。信道容量的增加与min(Nt,Nr)成正比分集增益。在采用空间分集方案的MIMO系统中,可以获得分集增益,即可靠性性能的改善。分集增益用独立衰落支路数来描述,即分集指数。在使用了空时编码的MIMO系统中,由于接收天线或发射天线之间的间距较远,可认为它们各自的大尺度衰落是相互独立的,因此分布式MIMO

  10. 神州数码无线产品(AC+AP)配置 - 2

    注意:本文主要掌握DCN自研无线产品的基本配置方法和注意事项,能够进行一般的项目实施、调试与运维AP基本配置命令AP登录用户名和密码均为:adminAP默认IP地址为:192.168.1.10AP默认情况下DHCP开启AP静态地址配置:setmanagementstatic-ip192.168.10.1AP开启/关闭DHCP功能:setmanagementdhcp-statusup/downAP设置默认网关:setstatic-ip-routegeteway192.168.10.254查看AP基本信息:getsystemgetmanagementgetmanaged-apgetrouteAP配

随机推荐