wifi
约 477 字大约 2 分钟
2024-05-31
WiFi 是 ESP32 的主要功能,BeShell 实现了完整的 WiFi JavaScript API。
详细 API 请参考 WiFi 模块 API。
基础代码
C++ 初始化
#include <BeShell.hpp>
using namespace be ;
BeShell beshell ;
void app_main() {
// 应用 WiFi 和文件系统模块
beshell.use<WiFi>() ;
beshell.use<FS>() ;
// 挂载分区
FS::mount("/", new LittleFS("fsroot", true)) ;
// 启动 BeShell
beshell.setup() ;
// 自动运行 main.js
beshell.engine->evalScript("/main.js") ;
beshell.run() ;
}JS 初始化
import * as wifi from "wifi"启动 WiFi 热点
import * as wifi from "wifi"
async function main() {
// 启动热点
const started = await wifi.startAP("BeShell", "12345678")
if (started) {
console.log("AP started")
} else {
console.log("AP start failed")
}
}
main()手机或电脑连接热点后,访问 http://192.168.4.1 即可。
连接 WiFi 热点
import * as wifi from "wifi"
async function main() {
// 连接到热点
const connected = await wifi.connect("MyWiFi", "password123")
if (!connected) {
console.log("Connection failed")
return
}
// 等待获取 IP 地址
const ipInfo = await wifi.waitIP()
if (ipInfo) {
console.log("IP:", ipInfo.ip)
}
// 网络已可用
}
main()扫描附近热点
import * as wifi from "wifi"
;(async () => {
// 切换到 STA 模式(热点扫描需要在 STA 模式下)
wifi.setMode(1)
// 启动 WiFi
await wifi.start()
// 扫描并输出附近热点
const list = await wifi.scan()
list.forEach(ap => {
console.log(`${ap.ssid} ${ap.rssi} dBm`)
})
})()常用 API
| API | 说明 |
|---|---|
wifi.start() | 启动 WiFi 硬件 |
wifi.stop() | 停止 WiFi 硬件 |
wifi.startAP(ssid, password) | 启动热点(AP 模式) |
wifi.stopAP() | 停止热点 |
wifi.connect(ssid, password) | 连接到热点(STA 模式) |
wifi.disconnect() | 断开连接 |
wifi.waitIP() | 等待 DHCP 分配 IP |
wifi.scan() | 扫描附近热点 |
wifi.status() | 获取连接状态 |
wifi.setMode(mode) | 设置模式:0=未启动, 1=STA, 2=AP, 3=STA+AP |
常见问题
连接失败怎么办?
- 确认热点名称和密码正确
- 检查热点是否正常工作
- 尝试靠近路由器
- 使用
wifi.status("sta")查看详细状态
如何设置静态 IP?
// 先停止 DHCP
wifi.dhcpStaStop()
// 设置静态 IP
wifi.setStaIP("192.168.1.100", "255.255.255.0", "192.168.1.1")如何自动重连?
连接时设置 retry 为负数,会启动守护进程自动重连:
await wifi.connect("MyWiFi", "password", -1)