WIFI

1. 简介

AIOT-3568A设有WiFi模块,可以直接搜索,也可接天线用于信号增幅。 WiFi模块以及如何连接天线如下:

image1

2. HDC相关指令

hdc指令可以用于查询WiFi的信息以及连接状态
hdc shell ifconfig

3. 标准API使用方法

备注

本模块提供企业设备WiFi管理能力,包括查询WiFi开启状态等。首批接口从API version 10开始支持,接口仅可在Stage模型下使用。

  • WLAN标准接口

    @ohos.wifiManager (WLAN)

  • API使用说明

    使用WIFI相关API开发时候,需要先了解熟悉第一个open Harmony工程的创建,相关文档 Hello World应用以及部署

    在使用一个API时,需要注意以下几点:
    • API权限说明

    • API的参数与返回值

    • API调用错误的时候,参考API错误码和通用错误码

    • API示例的正确使用

如下图所示,即为标准API文档

wifiDemo

4. 社区Demo

  • 简介

    为了帮助开发者更快速的使用板子开发和学习,我们在gitee上提供了一个WiFi相关的使用示例,每一个项目都是独立的DevEco Studio工程,开发者可以将工程导入到DevEco Studio中即可,通过浏览代码、编译工程、安装和运行应用示例来了解应用示例中涉及API的使用方法。

    giteeWIFI示例

小技巧

在导入社区Demo工程的时候,需要开发者需要注意本地的开发环境是否与项目的一致,即本地SDK是否与项目SDK一致。

  • 导入模块

    在使用WIFI标准API的时候,最重要的一步是导入WIFI的模块,才能使用WIFI相应的API接口。通常模块导入是在文件头导入 导入模块如下:

    import wifiManager from ‘@ohos.wifiManager’

  • API 介绍

    社区Demo的实现引用以下API,实现如何打开WIFI、WIFI扫描,以及WIFI的连接的基本实现。

备注

以下介绍均以为简单介绍API的系统能力以及对应函数 请结合 giteeWIFI示例WIFI官方标准API开发文档 去熟悉开发

  • wifiManager.enableWifi(使能WLAN)

    • isWifiActive(): boolean

    • 需要权限: ohos.permission.SET_WIFI_INFO 和 ohos.permission.MANAGE_WIFI_CONNECTION 仅系统应用可用。

  • wifiManager.disableWifi(去使能WLAN)

    • isWifiActive(): boolean

    • 需要权限: ohos.permission.SET_WIFI_INFO 和 ohos.permission.MANAGE_WIFI_CONNECTION 仅系统应用可用。

  • wifiManager.startScan(启动WLAN扫描)

    • startScan(): void

  • wifiManager.getScanInfoList(获取扫描结果)

    • getScanInfoList(): Array<WifiScanInfo>

    • 需要权限: ohos.permission.GET_WIFI_INFO

  • wifiManager.isWifiActive(查询WLAN是否已使能)

    • isWifiActive(): boolean

    • 需要权限: ohos.permission.GET_WIFI_INFO

  • wifiManager.connectToDevice(连接指定网络)

    • connectToDevice(config: WifiDeviceConfig): void

    • 需要权限: ohos.permission.SET_WIFI_INFO 和 ohos.permission.SET_WIFI_CONFIG 和 ohos.permission.MANAGE_WIFI_CONNECTION,仅系统应用可用。

  • Demo主要实现源码

  • wifi.ets
      1    import wifiManager from '@ohos.wifiManager';
      2    import { MyDivider } from './MyDivider';
      3
      4    @Entry
      5    @Component
      6    struct Index {
      7    @State message: string = 'WiFi示例'
      8    private TAG: string = 'ShiMetaWifi'
      9    @State wifiStatus: string = 'null'
     10    @State wifiInfoList: string = ''
     11    @State passWord: string = ''
     12    @State account: string = ''
     13
     14    build() {
     15        Row() {
     16        Column() {
     17            Text(this.message)
     18            .fontSize(50)
     19            .fontWeight(FontWeight.Bold)
     20
     21
     22            Row() {
     23            Text('WIFI开关')
     24                .fontSize(50)
     25                .fontWeight(FontWeight.Bold)
     26            Toggle({ type: ToggleType.Switch, isOn: false })
     27                .width(50)
     28                .height(50)
     29                .selectedColor('#007DFF')
     30                .switchPointColor('#FFFFFF')
     31                .onChange((isOn: boolean) => {
     32                if (isOn) {
     33                    try {
     34                    wifiManager.enableWifi();
     35                    } catch (error) {
     36                    console.error("failed:" + JSON.stringify(error));
     37                    }
     38                } else {
     39                    try {
     40                    wifiManager.disableWifi();
     41                    } catch (error) {
     42                    console.error("failed:" + JSON.stringify(error));
     43                    }
     44                }
     45                })
     46            }
     47            .width('100%')
     48            .justifyContent(FlexAlign.SpaceAround)
     49            .padding(10)
     50            MyDivider();
     51
     52
     53            Row() {
     54            Button('点击查询WIFI是否打开')
     55                .onClick(() => {
     56                let isWifiActive = wifiManager.isWifiActive();
     57                if (isWifiActive) {
     58                    this.wifiStatus = 'On'
     59                } else {
     60                    this.wifiStatus = 'Off'
     61                }
     62                console.log(this.TAG, 'isWifiActive' + isWifiActive);
     63                })
     64            Text(this.wifiStatus)
     65                .fontSize(50)
     66                .fontWeight(FontWeight.Bold)
     67            }
     68            .width('100%')
     69            .justifyContent(FlexAlign.SpaceAround)
     70            .padding(10)
     71            MyDivider();
     72
     73            Row() {
     74            Button('点击开始扫描')
     75                .onClick(() => {
     76                wifiManager.startScan()
     77                })
     78            }.padding(10)
     79
     80            Row() {
     81            Button('点击获取扫面结果')
     82                .onClick(() => {
     83                let scanInfoList = wifiManager.getScanInfoList();
     84                this.wifiInfoList = JSON.stringify(scanInfoList)
     85                console.info("scanInfoList:" + JSON.stringify(scanInfoList));
     86                })
     87            }.padding(10)
     88
     89            Row() {
     90            Button('点击清空')
     91                .onClick(() => {
     92                this.wifiInfoList = ''
     93                })
     94            }.padding(10)
     95
     96            Text(this.wifiInfoList)
     97            Column() {
     98            Row() {
     99                TextInput({ placeholder: '输入账号' })
    100                .onChange((value: string) => {
    101                    this.account = value;
    102                    console.log(this.TAG, 'account :' + this.account)
    103                })
    104            }.padding(10)
    105
    106            Row() {
    107                TextInput({ placeholder: '输入密码' })
    108                .onChange((value: string) => {
    109                    this.passWord = value;
    110                    console.log(this.TAG, 'passWord :' + this.passWord)
    111                })
    112            }.padding(10)
    113
    114            Button('连接WiFi')
    115                .onClick(() => {
    116                try {
    117                    let config: wifiManager.WifiDeviceConfig = {
    118                    ssid: this.account,
    119                    preSharedKey: this.passWord,
    120                    securityType: 3
    121                    }
    122                    wifiManager.connectToDevice(config);
    123                } catch (error) {
    124                    console.error("failed:" + JSON.stringify(error));
    125                }
    126                })
    127
    128            }.width(500)
    129        }
    130        .width('100%')
    131        }
    132        .height('100%')
    133      }
    134    }
    

5. 代码编译

小技巧

代码编译详细流程可见,Hello World应用以及部署 中的第二部分(构建第一个页面部分内容)

6. 代码运行效果

用以上标准API接口实现WIFI Demo,如下图所示:

wifiIndex