esp8266主要用于物联网开发,可配合多种传感器实现我们所需。本文让我们一起走进esp8266的世界吧!
esp8266开发线路
线路一: 掉发型
需要自己写相关传感器的代码,解决各种依赖库。需要购买公网服务器,解决内网穿透等问题。耗时耗力,工作效率差。
线路二:有手型
即有手即可,我们可以借助blinker等平台连接我们的设备。官方提供的代码库比较丰富,开发者也比较多。无需购买公网服务器,并且和国内各个手机平台的语音助手对接比较方便。如小爱同学、天猫精灵等。
前期准备
硬件准备
- esp8266 (几块钱一个 还包邮
必须
) - 杜邦线 (
必须
) - 传感器 马达 舵机等 (根据你的实际情况购买)
软件准备
- Arduino IDE
- blinker APP(用于操作物联网设备)
环境配置
运行开发工具Arduino IDE
点击文件
-首选项
-开发板管理地址
填写下面域名:https://arduino.me/packages/esp8266.json(后期可根据自身实际情况,自行增减。)
然后点击工具
-选择其他开发板
根据你的板子情况如我的是8266
进行搜索。
选择对应的板子后,自动下载或手动下载对应的库(推荐手动下载,网络不行的话就挂代理)
加载Blinker库
因为我们要基于Blinker开发,因而需要下载他的库,下载地址(https://diandeng.tech/dev)下载完成后,通过Arduino IDE 菜单
>项目
>加载库
>添加.ZIP库
导入到库,如图:
到此,开发环境配置完成。
Hello Word
01 在app中添加设备,获取Secret Key
进入App,点击右上角的“+”号,然后选择 添加设备点击选择Arduino
> WiFi
接入复制申请到的Secret Key
02 编译并上传示例程序
打开Arduino IDE,通过 文件
>示例
>Blinker
>Blinker_Hello/Hello_WiFi
打开例子。
在程序中找到如下变量,填入您申请到的Secret Key(auth)和要连接的WiFi热点名(ssid)、密码(pswd)
char auth[] = "abcdefghijkl"; //上一步中在app中获取到的Secret Key
char ssid[] = "逍遥子大表哥"; //您的WiFi热点名称
char pswd[] = "123456789"; //您的WiFi密码
配置完成后,先编译后上传。
然后你在手机APP中就可以看到设备已经上线了。
当然名称和图标都是可以改的。
03 DIY界面
在设备列表页,点击设备图标,进入设备控制面板,首次进入设备控制面板,会弹出向导页,在向导页点击 载入示例,即可载入示例组件。
实战之基于ESP8266的远程开关机
首先来看看最终效果吧。
[dplayer url="https://blog.bbskali.cn/you/m3u8/xiaoai.m3u8" pic="https://blog.bbskali.cn/usr/uploads/2023/03/260347764.png" danmu="false"/]
准备
- esp8266开发板
- 杜邦线
- 电压表(可选)
充电宝(可选)
食用方法
编译下面代码到固件。两个线一头连接开发板的
GND
(负极)和GPIO0
一头连接主板的电源插口。
#define BLINKER_WIFI
#define BLINKER_MIOT_OUTLET
#include <Blinker.h>
char auth[] = "5fdb51bc1d31";
char ssid[] = "PDCN";
char pswd[] = "1234567890";
int GPIO = 0; #定义脚针为gpio0
// 新建按钮对象 和你diy页面中按钮的名字一样,即为kali
BlinkerButton Button1("kali");
int counter = 0;
//diy按钮的代码,如果你只想用小爱,这里可以直接删掉。
void button1_callback(const String & state)
{
//开机事件
BLINKER_LOG("get button state: ", state);
if (state == BLINKER_CMD_BUTTON_TAP) {//响应短按
if (digitalRead(LED_BUILTIN) == HIGH) { //IF 高电平状态
digitalWrite(LED_BUILTIN, LOW); //灯灭
digitalWrite(GPIO, HIGH); //关闭高电平
BLINKER_LOG("Button tap!");
delay(300); //定义3s
digitalWrite(LED_BUILTIN, HIGH); //重新启动高电平
digitalWrite(GPIO, LOW); //高电平输入灯亮
Button1.color("#FFC800");
Button1.text("运行中");
Button1.print();
}
}
//关机事件
else if (state == BLINKER_CMD_BUTTON_PRESSUP) {//响应长按 初始化状态为关机
if (digitalRead(LED_BUILTIN) == LOW) { //若电脑是开启状态(电脑通过APP启动)
digitalWrite(LED_BUILTIN, LOW);//继电器接通
BLINKER_LOG("Button pressed!");
Blinker.delay(5000);
digitalWrite(LED_BUILTIN, HIGH);//eps-01s灯灭
digitalWrite(GPIO, LOW);//5秒后继电器断开,相当于长按电脑开机键5秒
Button1.color("#CCCCCC");
Button1.text("初始化");
Button1.print();
}
}
}
//按钮事件结束
// 如果未绑定的组件被触发,则会执行其中内容
void dataRead(const String & data)
{
BLINKER_LOG("Blinker readString: ", data);
counter++;
Number1.print(counter);
}
//引入小爱
void miotPowerState(const String & state)
{
BLINKER_LOG("need set power state: ", state);
if (state == BLINKER_CMD_ON) {
digitalWrite(LED_BUILTIN, LOW);
BlinkerMIOT.powerState("off");
delay(500);
digitalWrite(LED_BUILTIN, HIGH);
BlinkerMIOT.powerState("on");
BlinkerMIOT.print();
}
else if (state == BLINKER_CMD_OFF) {
digitalWrite(LED_BUILTIN, LOW);
BlinkerMIOT.powerState("off");
BlinkerMIOT.print();
}
}
void setup()
{
// 初始化串口
Serial.begin(115200);
BLINKER_DEBUG.stream(Serial);
BLINKER_DEBUG.debugAll();
// 初始化有LED的IO
pinMode(LED_BUILTIN, OUTPUT);
digitalWrite(LED_BUILTIN, HIGH);
// 初始化blinker
Blinker.begin(auth, ssid, pswd);
Blinker.attachData(dataRead);
Button1.attach(button1_callback); //初始化按钮的参数
BlinkerMIOT.attachPowerState(miotPowerState);//初始化小爱的参数
}
void loop() {
Blinker.run();
}
核心代码解读
digitalWrite(LED_BUILTIN, LOW);
BlinkerMIOT.powerState("off");
delay(500);
digitalWrite(LED_BUILTIN, HIGH);
BlinkerMIOT.powerState("on");
电脑电脑的开机,两线接通头需断开连接。因此这里我加了时间参数delay(500);
先给设备通电,然后500ms后,在断电就行了。
面临的问题
因为电脑关机后,主板上也会没有点,给esp8266供电是个大问题。因此你需要借助电压表测量在电脑关机状态下,那个脚针存在3v以上的电压。然后利用主板给esp8266供电就行了。但是我的主板是二十年前的主板,一顿操作猛如虎,结果发现只有一个针脚电压0.8v。在没有办法的情况下,我用光猫的USB口直接给esp8266进行供电。算是解决了吧!
对接小爱
- 1打开米家App。通过
我的
>其他平台设备
>点击添加
>点灯科技
>绑定账号 ,绑定blinker
账号 - 2.绑定成功后,支持小爱控制的blinker设备会出现在 我的>其他平台设备>点灯科技 设备列表中
- 3.现在可以使用小爱控制该设备了
One comment
我选择WOL开机