!
ruff官网:ruff.io
文档:https://ruff.io/zh-cn/docs/
官网的标准ruff是RT5350平台,而针对ESP32的则是Ruff Lite,见这个页面:https://ruff.io/zh-cn/docs/download.html
来点好玩的吧。用ESP32实现远程点灯教程
该文转自:http://community.ruff.io/t/ruff-lite-esp-32/1049
ESP32 第一个发布版本(v0.1.0)虽然提供的功能比较少,但无论是网络模块还是硬件控制,都已经涵盖,可谓是麻雀虽小五脏俱全,既提供了基本的 WiFi 配置的功能,又支持 JavaScript 的 Net 模块,还可以进行 GPIO 的输入输出操作。本文就基于此,为大家介绍一个简单的案例 – 通过无线网络实现远程点灯。
前提条件
本文假设读者已经阅读完 Ruff Lite (esp32)的起步走文档,并且已经成功地点亮板载上的蓝色 LED。如果没有经历这一步,请移至 ESP32 开发环境准备6和Ruff Lite 起步走8进行学习。
原理
本案例建立在 TCP 通信的基础上,让 ESP32 作为 TCP server,等待 PC 端的 TCP client 发来的控制命令,如果控制命令为 on,则点亮板载 LED,若控制命令为 off,则关闭板载的 LED。
步骤
本案例共分为以下四个步骤:
- 创建 Ruff 应用,并编写 TCP server 逻辑代码
- 部署 Ruff 应用,执行 TCP server
- 编写 TCP client 逻辑代码
- 执行 TCP client 控制 LED 开关
具体实现过程
以下过程是在 MacOS 上完成,查看系统日志的方式和 Windows 稍有不同
1 创建 Ruff 应用,并编写 TCP server 逻辑代码
1.1 创建 Ruff 应用
$ mkdir esp32-wifi-led
$ cd esp32-wifi-led
$ rap init --board esp32-air-v40
1.2 编写 WiFi 配置逻辑代码
vim src/index.js
$.ready(function (error) {
if (error) {
console.log('error', error);
return;
}
var wifi = require('esp32-wifi');
var net = require('net');
wifi.start({
'ssid': 'your-ssid',
'password': 'your-password'
});
wifi.on('connect', function (ip) {
console.log('ip address: ' + ip.ip); // 显示 ESP32 连接到 AP 后获得的 IP 地址
});
});
1.3 编写 TCP server 代码
wifi.on('connect', function (ip) {
console.log('ip address: ' + ip.ip);
var server = net.createServer();
server.listen(8888);
server.on('connection', function (sock) {
sock.on('data', function (buffer) {
var command = buffer.toString();
// 如果 TCP client 发送来的命令为 on,则点亮 LED
if (command === 'on') {
console.log('turn on LED');
$('#led').turnOn();
// 如果 TCP client 发送来的命令为 off,则关闭 LED
} else if (command === 'off') {
console.log('turn off LED');
$('#led').turnOff();
} else {
console.log('Invalid command: ' + command);
}
// 发送给 TCP client OK 表示成功响应此次命令
sock.write('OK');
});
});
server.on('listening', function () {
console.log('TCP server starts to listen port 8888');
});
});
2 部署 Ruff 应用,执行 TCP server
rap deploy
screen /dev/cu.SLAB_USBtoUART 115200,cs8
可以看到日志中显示 IP 地址
!
ip address: xxx.xxx.xxx.xxx
TCP server starts to listen port 8888
xxx.xxx.xxx.xxx 为 ESP32 获得的 IP 地址
退出 screen 方式:先按 CTRL + A,再按 k ,最后按 y退出
3 编写 TCP client 逻辑代码
再打开一个终端
vim client.js
var net = require('net');
var command = process.argv[2]; // 命令行中执行此文件时的第三个参数作为 command
var HOST = 'xxx.xxx.xxx.xxx'; // 这里填写第2步中显示的 IP 地址
var PORT = 8888;
var client = net.createConnection({port: PORT, host: HOST});
client.on('connect', function () {
if (command !== undefined) {
client.write(command);
}
});
client.on('data', function (buffer) {
var ack = buffer.toString();
if (ack === 'OK') {
client.destroy();
}
});
4 执行 TCP client 控制 LED 开关
4.1 点亮 LED
ruff client.js on
可以看到 ESP32 开发板蓝色 LED 灯点亮,同时日志中显示 turn on LED
!
4.2 关闭 LED
ruff client.js off
可以看到 ESP32 开发板蓝色 LED 灯熄灭,同时日志中显示 turn off LED
!
关于 Net 模块,node 和 ruff 是兼容的,因此也可用 node 来执行 client.js 的代码
结束语
LED 的驱动 led-gpio 和继电器的驱动 relay-1c 原理相同,都是通过向一个 GPIO 管脚写高电平或低电平,控制其开关。如果读者感兴趣的话,可以加入一个继电器,从而远程控制一个正常的电灯开关。
欢迎更多开发者来尝试新的开发