1 Star 1 Fork 140

天很安静 / HarmonyOS-IoT-Application-Development

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
README.md 4.36 KB
一键复制 编辑 原始数据 按行查看 历史
Siwei Xu 提交于 2020-11-05 22:00 . update wifi demo code

Harmony OS物联网应用开发实战 第四章

本节主要介绍如何在HiSpark WiFi IoT套件上使用Hamony OS的WiFi相关编程接口。

相关知识点

  • WiFi的工作模式
    • AP模式:热点模式,提供无线接入服务,允许其它无线设备接入,提供数据访问,一般的无线路由/网桥工作在该模式。
    • STA模式:类似于无线终端,本身并不接受其他设备的接入,它可以连接到AP,一般无线网卡即工作在该模式。
  • Harmony OS的WiFi相关API头文件位于foundation\communication\interfaces\kits\wifi_lite\wifiservice目录,该目录下有9个文件;
    • wifi_device.h中定义的是STA模式的主要接口,例如扫描其他热点、添加热点配置(热点名称、密码等)、连接其他热点;
    • wifi_hotspot.h中定义的是AP模式的主要接口,例如设置热点信息(热点名称、密码等)、查询连接的设备列表;
    • wifi_hotsport_config.h中定义了设置和获取当前工作在2.4G或者5G频段的接口SetBandGetBand
    • 另外6个文件中定义了上述接口相关的类型,例如扫描结果、热点配置、热点连接状态等;

STA模式编程指南

扫描WiFi热点

经实际试验,发现在Harmony OS上扫描其他WiFi热点,需要注意以下事项

  1. 功能相关接口都有WifiErrorCode类型的返回值:

    • 需要接收并判断返回值是否为WIFI_SUCCESS,用于确认是否调用成功;
    • 不为WIFI_SUCCESS表示失败,通过枚举值查找错误原因;
  2. EnableWifi接口使能STA模式,DisableWifi关闭STA模式;

  3. Scan接口只是触发扫描动作,并不会等到扫描完成才返回;

  4. 调用Scan接口进行扫描之前,

    • 需要确保已经调用EnableWifi接口,并成功使能了STA模式;
    • 需要通过RegisterWifiEvent接口向系统注册扫描状态监听函数,用于接收扫描状态通知,如扫描动作是否完成等;
      • OnWifiScanStateChanged用于绑定扫描状态监听函数,该回调函数有两个参数statesize
      • state表示扫描状态,取值为0和1,1表示扫描动作完成;编程时可以与WifiEventState枚举值的WIFI_STATE_NOT_AVALIABLEWIFI_STATE_AVALIABLE进行比较,避免魔法数字;
      • size表示扫描到的热点个数;
  5. 扫描状态监听回调函数内,不能直接调用GetScanInfoList函数,正确用法:

    • 可以在状态更新回调函数中更新全局状态变量,另外一个线程中轮训状态变量,这种方式实现起来比较简单;但需要保证更新和查询操作的原子性(可以使用gcc内置原子操作函数),逻辑才是严格正确的;
    • 或者使用信号量进行通知,这种方式更好一些,更优雅;
  6. 扫描完成后要及时调用GetScanInfoList函数获取扫描结果;

    • 如果间隔时间太长(例如5秒以上),可能会无法获得上次扫描结果;
  7. GetScanResult函数有两个第二个参数:

    • 第一个参数result指向用于存放结果的数组,需要大于等于WIFI_SCAN_HOTSPOT_LIMIT
    • 第二个参数size类型为指针是为了内部能够修改它的值,返回后size指向的值是实际搜索到的热点个数;
    • 调用GetScanResult函数前,第二个参数size指向的实际值不能为0,否则会包参数错误;

如何编译

有两种方法可以编译此目录下的样例程序:

  1. 前两章中的方法——将当前目录下的*.c文件和BUILD.gn拷贝到openharmony源码的applications\sample\wifi-iot\app\iothardware目录下;

    1. 再修改openharmony源码的applications\sample\wifi-iot\app\BUILD.gn文件,将其中的 features 改为:iothardware:wifi_demo
    2. 再修改applications\sample\wifi-iot\app\iothardware\BUILD.gn文件,决定需要编译哪个.c文件;
    3. 在openharmony源码顶层目录执行:python build.py wifiiot
  2. 可以将本仓整体拷贝到openharmony源码树下,和applications同级;

    1. 修改openharmony源码的build\lite\product\wifiiot.json文件,将其中的:

      //applications/sample/wifi-iot/app替换为://HarmonyOS-IoT-Application-Development:app

    2. 在openharmony源码顶层目录执行:python build.py wifiiot

C
1
https://gitee.com/ly503288309/HarmonyOS-IoT-Application-Development.git
git@gitee.com:ly503288309/HarmonyOS-IoT-Application-Development.git
ly503288309
HarmonyOS-IoT-Application-Development
HarmonyOS-IoT-Application-Development
master

搜索帮助