当前位置: 首页 > news >正文

ESP8266+CH340+SG90舵机远程控制开关

因为晚上不想下去关灯,所以打算搞一个可以替代手关灯的操作,最后采用控制舵机的方式实现,物理层面实现远程开关

所需硬件

  • ESP8266
    是一款高性价比、低功耗的wifi模块,主要作用是使设备接入wifi网络,提供 GPIO、UART、SPI、I2C、PWM、ADC 等接口,频率范围2.4GHz–2.5GHz,应用层协议支持http/https、MQTT、WebSocket
  • CH340
    USB转串口,主要作用是程序烧录,使用3.3V/5V逻辑电平,直接连接单片机等嵌入式设备,无需额外电平转换
  • SG90
    PWM信号控制的小型的位置伺服驱动器,主要作用是实现物理操作,这里直接选择了180的就可以
    这里直接购买了以下硬件
  • ESP12F
    板子直接集成了CH340,不用额外布线,直接usb插入电脑即可(如果是安卓micro口,最好买一条usb数据线,因为有的只有充电功能,没有数据传输功能),成本价11

    或者也可以使用ESP-01s,最好用配套的烧录器
  • SG90
    180度的舵机绰绰有余,成本价4.13
  • 若干杜邦线
    最好公对母,公对公,母对母都买单,成本价3.32
  • 5V电源
    因为esp12f板子上的电为3.3v,而sg90舵机的需要5v电压,用3.3v会出现供电不足打滑的清空,需要5v电源为舵机单独供电

所需软件

  • Arduino
    https://www.arduino.cc/en/software
    开发工具,核心功能包括代码编写、编译、上传至开发板、调试(通过串口监视器)及库管理
  • 点灯科技
    https://www.diandeng.tech/doc/getting-start-8266
    如果自己有服务器或者只在局域网内操作,就没必要用点灯科技了,用这个平台也是简化一下

软件开发

首先检查板子是否正确,可以用示例代码测试一下

#include <ESP8266WiFi.h>void setup() {pinMode(LED_BUILTIN, OUTPUT); // 设置引脚为输出模式Serial.begin(115200);    // 初始化串口通信
}void loop() {digitalWrite(LED_BUILTIN, LOW);   // 点亮LEDdelay(1000);                 // 延时1秒digitalWrite(LED_BUILTIN, HIGH);  // 熄灭LEDdelay(1000);                 // 延时1秒
}

例程中宏LED_BUILTIN为开发板厂家定义的连接板载LED的引脚,如果您选择的开发板没有定义LED_BUILTIN,可以自行修改为您要使用的引脚
编译并上传程序到esp8266开发板,打开串口调试器,如果按照代码编写的要求,led灯开始闪烁,表名代码没问题,

/*
* 网址:https://www.bmobapp.com
* wechat:18102215493
*/// 加载WIFI头文件
#include <ESP8266WiFi.h>
// 加载MQTT库文件
#include <PubSubClient.h>// 你的WIFI名称,需要修改
const char* WIFI_SSID = "kelike";
// 你的WIFI密码,需要修改
const char* WIFI_PASSWORD = "kelike888";
// Bmob云的物联网地址
const char* MQTT_SERVER = "broker.codenow.cn";
// Bmob云的物联网端口
const int MQTT_PORT = 1883;
// 灯光引脚
const int LED = 2;
// 用户名,到Bmob云->创建的应用-> IOT -> 连接信息 中获取
#define APPID  "c137a89bda5c4f1c"
// 密码,到Bmob云->创建的应用-> IOT -> 连接信息 中获取
#define APPPASSWORD "8bd9088034704e0d"
// 你自己定义的设备类型,方便记忆就好,这里的LINE表示灯光的意思
#define TYPE  "LINE"WiFiClient espClient;
PubSubClient client(espClient);// 打开灯泡
void turnOnLed() {Serial.println("打开灯光");digitalWrite(LED, LOW);
}
// 关闭灯泡
void turnOffLed() {Serial.println("关闭灯光");digitalWrite(LED, HIGH);
}// 配置esp8266的WIFI账号和密码
void setup_wifi() {delay(10);Serial.println();Serial.print("Connecting to ");Serial.println(WIFI_SSID);// 设置WIFI的账号和密码WiFi.begin(WIFI_SSID, WIFI_PASSWORD);// 检测WIFI是否联通while (WiFi.status() != WL_CONNECTED) {delay(500);Serial.print(".");}Serial.println("");Serial.println("WiFi已连接");
}// MQTT服务的回调
void callback(char* topic, byte* payload, unsigned int length) {Serial.print(topic);Serial.print("主题收到消息");String message = "";for (int i = 0; i < length; i++) {message += (char)payload[i];}Serial.print(message);Serial.println();if (message == "1") {//如果接收到1字符串,调用开灯方法turnOnLed();//开灯函数} else if (message == "0") {//如果接收到0字符串,调用关灯方法turnOffLed();}message = "";
}void reconnect() {while (!client.connected()) {Serial.print("正在尝试MQTT连接...");String client_id = "esp8266client";client_id += String(WiFi.macAddress());if (client.connect(client_id.c_str(), APPID, APPPASSWORD)) {Serial.println("正常连接");//这是你的主题名称String topic = "devices/" + String(TYPE) + "/" + String(APPID) + "/" + client_id;client.subscribe(topic.c_str());} else {Serial.print("连接异常,rc=");Serial.print(client.state());Serial.println(" 5秒后重试");// 5秒重试delay(5000);}}
}void setup() {pinMode(LED, OUTPUT);// 设置波特率Serial.begin(115200);// 配置WIFI并连接上网setup_wifi();// 连接MQTT服务client.setServer(MQTT_SERVER, MQTT_PORT);// 设置MQTT消息回掉client.setCallback(callback);digitalWrite(LED, HIGH);
}void loop() {if (!client.connected()) {reconnect();}client.loop();
}
http://www.hskmm.com/?act=detail&tid=16749

相关文章:

  • 【ACM出版、连续三届EI检索】第四届人工智能与智能信息处理国际学术会议(AIIIP 2025)
  • 08_多线程编程
  • VisionPro学习笔记- PMAlignTOOL
  • FeignClient提示No subject alternative DNS name matching配置SSL
  • 【组合数学基础9】Catalan数(卡特兰数)笔记
  • 详细介绍:npm玩转技巧
  • 软件构造的基本原理 1章
  • 【2025-09-23】性格问题
  • mvnd 安装和配置
  • 【IEEE出版】第二届数据挖掘与智能计算国际学术会议(ICDM 2025)
  • 第五届IEEE能源工程与电力系统国际学术会议(IEEE-EEPS 2025)
  • PS字体处理
  • Gitee DevOps:国产研发效能平台的破局之道
  • 开发实用软件
  • 代码随想录算法训练营第八天 | leetcode 344 541 卡特54
  • 626. 换座位
  • 时序大模型/时序小模型
  • Gitee PPM:数据驱动的软件工厂项目管理新范式
  • 实用指南:《前端学习总结:GitLab、状态管理、组件库与 Umi.js》
  • C#中,EXCEL与表列顺序完全一致情况的导入处理(BeginBinaryImport)
  • Gitee PPM:数据驱动的DevSecOps项目管理新范式
  • acme.sh:强大的ACME协议Shell脚本,支持多DNS API
  • P9545 [湖北省选模拟 2023] 环山危路 / road 题解
  • 探秘圆周率 π:圆周率计算在线工具
  • 以史为鉴【长期置顶】
  • java21学习笔记-未命名的模式和变量 - 指南
  • 达梦数据库DM-查询指定模式下表的大小
  • 【笔记】Prfer 序列
  • win11 无线投屏(Miracast:)引发的思考附带解决方案 - Popeye
  • 2025年十大主流项目管理工具评测:功能覆盖与成本效益分析