跳至主要內容

用 JavaScript 连接 WiFi

大约 2 分钟

用 JavaScript 连接 WiFi

WiFi 是 ESP32 系列芯片的主要特色,BeShell 较完整的实现了 WiFi 的 JavaScript API 。下面给出了一些常用的例子,详细 API 请参考 WiFi 模块 API

1. Arduino 启动工程代码

这里主要介绍 WiFi 模块的 JavaScript API,如何在 ESP32 设备上运行 JavaScript 文件,请参考:运行 JavaScript 脚本文件

使用 WiFi 模块的 Arduion 工程代码如下:

#include <BeShell.hpp>

using namespace be;

BeShell be;

void setup() {

    // 启动 WiFi 模块
    beshell.use<WiFi>() ;

    // 启动 文件系统模块
    beshell.use<FS>() ;
    
    // 挂载分区
    FS::mount("/", new FatFS("ffat",true)) ;
    
    // 启动 BeShell
    beshell.setup() ;
}

// 主循环
void loop() {
    beshell.loop() ;
}

ESP-IDF 框架下使用 WiFi 模块的工程类似

接下来是 JavaScript 文件的例子。

2. 做为 WiFi 热点

简单启动热点的例子:

import * as wifi from 'wifi'

// 启动热点
wifi.startAP('BeShell', '12345678')

// 停止热点
// wifi.stopAP()

wifi.startAP() 是一个返回 Promise 的异步函数,如果需要等待热点启动成功,可以用 await 关键字。

import * as wifi from 'wifi'

// 定义异步主函数
async function main() {

    // 启动热点
    if( await wifi.startAP('BeShell', '12345678') ){
        console.log('AP started successfully')
    }
    else {
        console.log('AP start failed')
    }

}

// 调用异步主函数
main()

3. 做为 WiFi 客户机

简单作为客户机连接到热点:

impor * as wifi from 'wifi'

// 连接到热点
wifi.connect('BeShell', '12345678')

// 断开连接
// wifi.disconnect('BeShell', '12345678')

wifi.connect() 同样返回 Promise,如果需要等待连接成功,可以用 await 关键字。

等待连接成功且网络可用的例子:

import * as wifi from 'wifi'

// 定义异步主函数
async function main() {

    // 连接到热点
    if( await wifi.connect('BeShell', '12345678') ){
        console.log('connection established')
    }
    else {
        console.log('connection failed')
        return
    }

    // 等待从 DHCP 服务器分配 IP 地址
    let status = await wifi.waitIP()
    if( status ) {
        console.log('IP address obtained: ', status.ip)
    }
    else {
        console.log('failed to get IP address')
        return
    }

    // 网络可用, 可以访问网络了
    // todo ...
}

// 调用异步主函数
main()

4. 扫描附近的热点

注意:热点扫描功能需要在 STA 模式下工作

import * as wifi from 'wifi'

;(async () => {

    // 切换到 STA 模式, 也可以 APSTA 模式
    // 参数 1: STA 模式, 2: AP 模式, 3: APSTA 模式
    wifi.setMode(1)

    // 启动 WiFi 模块
    await wifi.start()

    // 扫描并输出附近的热点
    let ssidList = await wifi.scan()
    console.log(ssidList)

})()

上次编辑于:
贡献者: alee