0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

人脸和手势识别模组 用BW21-CBV-Kit设计洗衣机远程控制面板

AIoT行业洞察 ? 来源:AIoT行业洞察 ? 作者:AIoT行业洞察 ? 2025-07-15 14:34 ? 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

以下作品由安信可社区用户

无垠的广袤制作

本文介绍了安信可 BW21-CBV-Kit 开发板结合扩展板,实现了基于 HTTP 协议的洗衣机网页控制面板,可模拟远程控制洗衣机的运行、暂停和停止状态,并通过 OLED 实时显示洗衣机状态。

项目介绍

HTTP 网页发送指令,实现远程控制洗衣机运行状态且驱动OLED实时显示。

硬件连接
流程图
工程代码
效果演示

硬件连接

该项目是模拟洗衣机控制,因此硬件方面仅使用 OLED 显示屏。

wKgZO2h19mKAALL0AADd8xawU80516.jpg

若要对外设进行实际控制,可在相关代码模块中添加对应的 GPIO 操作。

流程图

wKgZPGh19mOADeHAAACprVoXoIM583.jpg

工程代码

打开 Arduino IDE ,新建工程并添加如下代码

#include
#include
#include
#include
#include
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
#define OLED_RESET -1
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
// Washer state
enum WasherState {
IDLE,
WASHING,
RINSING,
SPINNING,
DONE,
PAUSED
};
const char* stateNames[] = {
"Standby",
"Washing",
"Rinsing",
"Spinning",
"Completed",
"Paused"
};
WasherState currentState = IDLE;
int remainingTime = 0; // second
unsigned long lastUpdateTime = 0;
// WiFi credentials
char ssid[] = "xxx";
char password[] = "xxx";
WiFiServer server(80);
void setup() {
Serial.begin(115200);
// Initialize OLED
if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println(F("SSD1306 allocation failed"));
for(;;);
}
display.display();
delay(2000);
display.clearDisplay();
// Connect to WiFi
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected");
Serial.print("IP address: ");
Serial.println(WiFi.localIP());
server.begin();
Serial.println("HTTP server started");
updateDisplay();
}
void loop() {
WiFiClient client = server.available();
if (client) {
Serial.println("New client connected");
String currentLine = "";
while (client.connected()) {
if (client.available()) {
char c = client.read();
Serial.write(c);
if (c == 'n') {
if (currentLine.length() == 0) {
// Send HTTP headers
client.println("HTTP/1.1 200 OK");
client.println("Content-type:text/html");
client.println("Connection: close");
client.println();
// Send HTML content
client.print(" ");
client.print(" ");
client.print(" body{font-family:Arial;text-align:center;margin:0 auto;padding:20px;max-width:400px;}");
client.print(".btn{background-color:#4CAF50;border:none;color:white;padding:15px 32px;text-align:center;");
client.print("text-decoration:none;display:inline-block;font-size:16px;margin:4px 2px;cursor:pointer;border-radius:8px;width:150px;}");
client.print(".status{font-size:24px;margin:20px 0;padding:10px;background-color:#f0f0f0;border-radius:8px;}");
client.print(".btn-container{display:flex;flex-direction:column;align-items:center;gap:10px;} ");
client.print("

Washer Control Panel

");
client.print("

Current Status: ");
client.print(stateNames[currentState]);
client.print("

");
client.print("Start");
client.print("Pause");
client.print("Stop");
client.print("

");
break;
} else {
// Process requests
if (currentLine.startsWith("GET /start")) {
handleStart();
} else if (currentLine.startsWith("GET /pause")) {
handlePause();
} else if (currentLine.startsWith("GET /stop")) {
handleStop();
}
currentLine = "";
}
} else if (c != 'r') {
currentLine += c;
}
}
}
client.stop();
Serial.println("Client disconnected");
}
// Update washer state
if (currentState != IDLE && currentState != DONE && currentState != PAUSED) {
if (millis() - lastUpdateTime >= 1000) { // Update every second
lastUpdateTime = millis();
remainingTime--;
// State transition logic
if (remainingTime <= 0) {
currentState = DONE;
} else if (currentState == WASHING && remainingTime <= 20) {
currentState = RINSING;
} else if (currentState == RINSING && remainingTime <= 10) {
currentState = SPINNING;
}
updateDisplay();
}
}
}
void updateDisplay() {
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(SSD1306_WHITE);
display.setCursor(0, 0);
display.println("Washer Status: ");
display.setTextSize(2);
display.setCursor(0, 16);
display.println(stateNames[currentState]);
display.setTextSize(1);
display.setCursor(0, 40);
display.print("IP: ");
display.println(WiFi.localIP());
if (currentState != IDLE && currentState != DONE) {
display.setCursor(0, 52);
display.print("Time left: ");
display.print(remainingTime);
display.println("s");
}
display.display();
}
void handleStart() {
if (currentState == IDLE || currentState == DONE) {
currentState = WASHING;
remainingTime = 30; // 30 seconds (simulating 30 minutes)
lastUpdateTime = millis();
Serial.println("Washer started");
} else if (currentState == PAUSED) {
currentState = WASHING; // Simplified - should resume previous state
lastUpdateTime = millis();
Serial.println("Washer resumed");
}
updateDisplay();
}
void handlePause() {
if (currentState == WASHING || currentState == RINSING || currentState == SPINNING) {
currentState = PAUSED;
Serial.println("Washer paused");
}
updateDisplay();
}
void handleStop() {
if (currentState != IDLE) {
currentState = IDLE;
remainingTime = 0;
Serial.println("Washer stopped");
}
updateDisplay();
}

保存工程,设备选择 AMB82-MINI 开发板,选择串口对应的端口号;

按住 BOOT 键的同时,短按 EN 键,使设备进入下载模式;

点击 上传 按钮,待上传完成,短按 EN 键复位并运行程序。

效果演示

串口打印网页服务器 ip 地址 192.168.31.111

wKgZO2h19mOAWdIzAADfOn4vjO4124.jpg

网页端

打开浏览器输入开发板 ip 地址,进入洗衣机控制面板。

停止状态

wKgZPGh19mSATdCiAABQcge0UPA447.jpg

暂停状态

wKgZO2h19mSAdrYeAABKGTBeoVE534.jpg

洗涤状态

wKgZPGh19mWABY6FAABMjlXGAbI221.jpg

OLED状态显示

点击网页的按钮即可进入相应的工作状态,同时 OLED 显示当前状态。

wKgZO2h19mWAJyDjAADD1gcKqCM450.jpg

动态演示

wKgZPGh19mWAPRXpAABituhueFI251.jpg

审核编辑 黄宇

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 手势识别
    +关注

    关注

    8

    文章

    229

    浏览量

    48346
  • 远程控制
    +关注

    关注

    4

    文章

    676

    浏览量

    35933
  • WIFI
    +关注

    关注

    81

    文章

    5410

    浏览量

    208659
  • 开发板
    +关注

    关注

    25

    文章

    5725

    浏览量

    105607
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    小安派BW21-CBV-Kit开发板教程——I2C之主机扫描设备

    该示例将扫描 I2C 总线,查找连接到 BW21-CBV-Kit 的设备。找到设备后,串行监视器上将显示该设备的地址。
    的头像 发表于 04-15 09:29 ?1238次阅读
    小安派<b class='flag-5'>BW21-CBV-Kit</b>开发板教程——I2C之主机扫描设备

    小安派BW21-CBV-Kit入门教程之主机模式读取Arduino UNO从

    作为一款本地AI图象识别开发板,BW21-CBV-Kit它能够独自运行目标识别模型。2.4GHz+5GHz的双频Wi-Fi,提供高性能的无线传输能力,让图象传输更加流畅。丰富的接口,搭配着AI
    的头像 发表于 05-21 15:38 ?626次阅读
    小安派<b class='flag-5'>BW21-CBV-Kit</b>入门教程之主机模式读取Arduino UNO从<b class='flag-5'>机</b>

    小安派BW21-CBV-Kit入门教程之读取DHT温湿度传感器

    作为一款本地AI图象识别开发板,BW21-CBV-Kit它能够独自运行目标识别模型。2.4GHz+5GHz的双频Wi-Fi,提供高性能的无线传输能力,让图象传输更加流畅。丰富的接口,搭配着AI
    的头像 发表于 02-18 13:52 ?836次阅读
    小安派<b class='flag-5'>BW21-CBV-Kit</b>入门教程之读取DHT温湿度传感器

    AI人脸识别开发板BW21-CBV-Kit驱动墨水屏

    试着BW21-CBV-Kit点亮2.9寸墨水屏,开发板例程非常丰富,在arduino上开发的话上手超级容易。
    的头像 发表于 03-04 18:24 ?1144次阅读
    <b class='flag-5'>用</b>AI<b class='flag-5'>人脸</b><b class='flag-5'>识别</b>开发板<b class='flag-5'>BW21-CBV-Kit</b>驱动墨水屏

    小安派BW21-CBV-Kit入门教程之OLED显示

    作为一款本地AI图象识别开发板,BW21-CBV-Kit它能够独自运行目标识别模型。2.4GHz+5GHz的双频Wi-Fi,提供高性能的无线传输能力,让图象传输更加流畅。丰富的接口,搭配着AI
    的头像 发表于 05-17 10:54 ?1110次阅读
    小安派<b class='flag-5'>BW21-CBV-Kit</b>入门教程之OLED显示

    小安派BW21-CBV-Kit入门教程之主机模式对Arduino UNO发送数据

    作为一款本地AI图象识别开发板,BW21-CBV-Kit它能够独自运行目标识别模型。2.4GHz+5GHz的双频Wi-Fi,提供高性能的无线传输能力,让图象传输更加流畅。丰富的接口,搭配着AI
    的头像 发表于 05-29 10:33 ?462次阅读
    小安派<b class='flag-5'>BW21-CBV-Kit</b>入门教程之主机模式对Arduino UNO发送数据

    小安派BW21-CBV-Kit入门教程之MPU6050 IMU零点检测

    作为一款本地AI图象识别开发板,BW21-CBV-Kit它能够独自运行目标识别模型。2.4GHz+5GHz的双频Wi-Fi,提供高性能的无线传输能力,让图象传输更加流畅。丰富的接口,搭配着AI
    的头像 发表于 07-04 17:33 ?924次阅读
    小安派<b class='flag-5'>BW21-CBV-Kit</b>入门教程之MPU6050 IMU零点检测

    BW21-CBV-Kit的使用教程

    ,可以扩展出无限可能。 BW21-CBV-Kit支持Arduino的开发方式,可以简单实现一些DIY想法,例如:人脸识别手势识别、物品
    的头像 发表于 01-03 11:30 ?969次阅读
    <b class='flag-5'>BW21-CBV-Kit</b>的使用教程

    BW21-CBV-Kit快速入门之Arduino环境搭建

    作为一款本地AI图象识别开发板,BW21-CBV-Kit它能够独自运行目标识别模型。2.4GHz+5GHz的双频Wi-Fi,提供高性能的无线传输能力,让图象传输更加流畅。丰富的接口,搭配着AI
    的头像 发表于 01-15 17:07 ?872次阅读
    <b class='flag-5'>BW21-CBV-Kit</b>快速入门之Arduino环境搭建

    小安派BW21-CBV-Kit入门教程:中断控制LED

    ,可以扩展出无限可能。 BW21-CBV-Kit支持Arduino的开发方式,可以简单实现一些DIY想法,例如:人脸识别手势识别、物品
    的头像 发表于 01-21 11:32 ?773次阅读
    小安派<b class='flag-5'>BW21-CBV-Kit</b>入门教程:中断<b class='flag-5'>控制</b>LED

    小安派BW21-CBV-Kit入门教程之超声波测距

    作为一款本地AI图象识别开发板,BW21-CBV-Kit它能够独自运行目标识别模型。2.4GHz+5GHz的双频Wi-Fi,提供高性能的无线传输能力,让图象传输更加流畅。丰富的接口,搭配着AI
    的头像 发表于 02-11 11:38 ?578次阅读
    小安派<b class='flag-5'>BW21-CBV-Kit</b>入门教程之超声波测距

    BW21-CBV-Kit如何接入HomeAssistant实时查看AI摄像头画面

    看过这么多关于 HomeAssistant 教程,应该有很多小伙伴已经搭建起自己的 HomeAssistant 了,HomeAssistant 还是很强大的,只要设备可以进行 RTSP 推流就可以在 HomeAssistant 上查看视频流数据,刚好 BW21-CBV-Kit 的示例附带 RTSP,分享一下接入的方
    的头像 发表于 02-18 13:48 ?658次阅读
    <b class='flag-5'>BW21-CBV-Kit</b>如何接入HomeAssistant实时查看AI摄像头画面

    直接送!50套小安派 BW21-CBV-Kit Ai图像识别开发板!

    BW21-CBV-Kit,欢迎动手能力强的小伙伴玩起来! ? ? 奖品介绍 BW21-CBV-Kit 是一款本地 AI 图象识别开发板,它能够独自运行目标识别模型。 2.4GHz+5
    的头像 发表于 02-19 14:37 ?425次阅读
    直接送!50套小安派 <b class='flag-5'>BW21-CBV-Kit</b> Ai图像<b class='flag-5'>识别</b>开发板!

    安信可AI人脸识别开发板BW21-CBV-Kit驱动墨水屏

    Arduino 环境搭建 【教程】小安派BW21-CBV-Kit入门教程:中断控制 LED 【教程】小安派BW21-CBV-Kit——超声波测距 【教程】BW21-CBV-Kit如何接
    的头像 发表于 03-06 08:47 ?488次阅读
    <b class='flag-5'>用</b>安信可AI<b class='flag-5'>人脸</b><b class='flag-5'>识别</b>开发板<b class='flag-5'>BW21-CBV-Kit</b>驱动墨水屏

    小安派BW21-CBV-Kit入门教程之LCD屏显示数据

    作为一款本地AI图象识别开发板,BW21-CBV-Kit它能够独自运行目标识别模型。2.4GHz+5GHz的双频Wi-Fi,提供高性能的无线传输能力,让图象传输更加流畅。丰富的接口,搭配着AI
    的头像 发表于 04-23 10:45 ?354次阅读
    小安派<b class='flag-5'>BW21-CBV-Kit</b>入门教程之LCD屏显示数据