海纳百客

海纳百客

使用esp-01s与继电器配合实现远程开关灯

吃瓜阿阳

友情提示点击顶部放大镜 可以使用站内搜索 记住我们的地址 www.hainabaike.com

一.需要购买的硬件:

1. esp8266或esp32

esp01,esp01s,esp8266,esp32开发板都可以,这里使用esp-01s,因为实现简单的功能,并且价格便宜。

2. usb转ttl

这是为了烧录程序用,买的ft232rl,这个线可以在板上设置3.3v和5v。esp-01s是3.3v的电压。

3. 杜邦线

公对公,母对母,母对公都买一些。

4. 面包板

方便实验用,

交流转直流可调电源,用途广泛。把交流电转直流电,电压可调。

还额外买了一个面包板用的dc-dc专用模块,输入时直流7v-12v,输出时5v,3.3v.链接与面包板相同,买面包板时多买一个电源即可。

为什么要两个电源,因为面包板的专用电源可以方便在面包板上供5v和3.3v的电。

5. 万用表

买个好一点的,以后长期使用,用来测量电压。有万用表的忽略。

二. 软件安装:

1. 安装Arduino IDE

Donate to Arduino

2. 安装esp8266或esp32扩展包

esp-01s属于esp8266. 下面的链接既有esp32,也有8266.

ESP32的开发环境怎么搭建?

3.下载点灯科技的app和blinker arduino库

点灯科技-点灯物联网解决方案

app下载后,安装在手机上,在点灯注册账号。

每一个设备在blinker上都有一个唯一的secret key(密钥),blinker设备会使用该key认证设备。如何获得一个secret key? 打开点灯app,添加设备,选择开灯-独立设备,再选择网络接入,就得到一个key。拷贝下来,编写程序会用到它。

下载设备端的sdk到电脑,然后把这个库解压拷贝到arduino安装路径下的libraries目录(比如我的是:D:Program Files (x86)Arduinolibraries)

也可以使用add zip library,添加下载的blinker sdk库文件,sdk格式。还可以用manage libraries直接搜索blinker添加,我使用的搜索的方法。

三. 各模块的连接

1.esp01s与usb转ttl的连接

esp01 -> usb转ttl

RX -> TX //esp01的发接usb转ttl的收

TX -> RX

VCC -> VCC //这里的vcc时3.3v

CH_EN -> VCC //如果时esp01,这条线必须连接,esp01s可以不接。

GPIO-0 -> GND //gpio0接低电平,所以接地

GND -> GND

2. usb转ttl与电脑的连接

使用usb线连接到电脑。usb转ttl板上3.3v针脚测量用万用表测量只有3v。

3.使用220v转直流的电源和面包板直流电源。

交流220v转直流跳到7-12v,把直流输出接到在把面包板上的专用电源的输入,得到3.3v和5v直流电源。并把跳线跳到3.3v的针脚上。这样面包板的两端都有3.3v的正电压和GND,把面包板上的GND与与esp01s的GDN和gpio0连接;面包板上的vcc 3.3v给esp01s上的vcc和EN连接(esp01需要en连接高电平,esp01s不需要),连接后如图所示。

编写代码

打开blinker的实例程序,修改代码,这段代码是控制esp01s上的led灯,我们把它换成gpio 0端口,然后运行。下面是实例代码。

/* *****************************************************************
 *
 * Download latest Blinker library here:
 * https://github.com/blinker-iot/blinker-library/archive/master.zip
 * 
 * 
 * Blinker is a cross-hardware, cross-platform solution for the IoT. 
 * It provides APP, device and server support, 
 * and uses public cloud services for data transmission and storage.
 * It can be used in smart home, data monitoring and other fields 
 * to help users build Internet of Things projects better and faster.
 * 
 * Make sure installed 2.7.4 or later ESP8266/Arduino package,
 * if use ESP8266 with Blinker.
 * https://github.com/esp8266/Arduino/releases
 * 
 * Make sure installed 1.0.5 or later ESP32/Arduino package,
 * if use ESP32 with Blinker.
 * https://github.com/espressif/arduino-esp32/releases
 * 
 * Docs: https://diandeng.tech/doc
 *       
 * 
 * *****************************************************************
 * 
 * Blinker 库下载地址:
 * https://github.com/blinker-iot/blinker-library/archive/master.zip
 * 
 * Blinker 是一套跨硬件、跨平台的物联网解决方案,提供APP端、设备端、
 * 服务器端支持,使用公有云服务进行数据传输存储。可用于智能家居、
 * 数据监测等领域,可以帮助用户更好更快地搭建物联网项目。
 * 
 * 如果使用 ESP8266 接入 Blinker,
 * 请确保安装了 2.7.4 或更新的 ESP8266/Arduino 支持包。
 * https://github.com/esp8266/Arduino/releases
 * 
 * 如果使用 ESP32 接入 Blinker,
 * 请确保安装了 1.0.5 或更新的 ESP32/Arduino 支持包。
 * https://github.com/espressif/arduino-esp32/releases
 * 
 * 文档: https://diandeng.tech/doc
 *       
 * 
 * *****************************************************************/

#define BLINKER_WIFI

#include <Blinker.h>

char auth[] = "Your Device Secret Key"; //上面得到的secret key填写到这里
char ssid[] = "Your WiFi network SSID or name"; //家里的wifi账号
char pswd[] = "Your WiFi network WPA password or WEP key"; //家里的wifi密码

// 新建组件对象,其中新建的btn-abc和num-abc是主键的名称。要与app里面键的组件名称一致。
BlinkerButton Button1("btn-abc");
BlinkerNumber Number1("num-abc");

int counter = 0;

// 按下按键即会执行该函数
void button1_callback(const String & state)
{
    BLINKER_LOG("get button state: ", state);
    digitalWrite(LED_BUILTIN, !digitalRead(LED_BUILTIN));
}

// 如果未绑定的组件被触发,则会执行其中内容
void dataRead(const String & data)
{
    BLINKER_LOG("Blinker readString: ", data);
    counter++;
    Number1.print(counter);
}

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);
}

void loop() {
    Blinker.run();
}

 

更改为:

#define BLINKER_WIFI
#include <Blinker.h>
//#define BLINKER_ALIGENIE_LIGHT //如果家里有天猫精灵,用它来也可以控制开关灯

char auth[] = "Your Device Secret Key"; //上面得到的secret key填写到这里
char ssid[] = "Your WiFi network SSID or name"; //家里的wifi账号
char pswd[] = "Your WiFi network WPA password or WEP key"; //家里的wifi密码

// 新建组件对象,其中新建的btn-abc和num-abc是主键的名称。要与app里面键的组件名称一致。
BlinkerButton Button1("btn-abc");
BlinkerNumber Number1("num-abc");

int pinRelay =0;  //指定gpio 0端口来控制继电器
 
// 新建组件对象
BlinkerButton Button1("btn-abc");
BlinkerNumber Number1("num-abc"); 

// 按下按键即会执行该函数
void button1_callback(const String & state) {
    BLINKER_LOG("get button state: ", state);
    if (state=="on") {
//        digitalWrite(, LOW);
        digitalWrite(pinRelay,LOW);
        // 反馈开关状态
        Button1.print("on");
    } else if(state=="off"){
 //       digitalWrite(pinRelay, HIGH);
        // 反馈开关状态
        digitalWrite(pinRelay, HIGH);
        Button1.print("off");
    }
}
 void heartbeat()  //心跳包
{
    Button1.icon("fas fa-lightbulb");
    Button1.color("#fddb00");
    Button1.text("关灯","打开啦");
  Number1.print(WiFi.RSSI());  //信号强度

}

//天猫精灵这段注释,有天猫精灵的可以打开测试。
/*
void aligeniePowerState(const String & state)
{
    BLINKER_LOG("need set power state: ", state);

    if (state == BLINKER_CMD_ON) {
        digitalWrite(LED_BUILTIN, LOW);
        digitalWrite(pinRelay, LOW);
        BlinkerAliGenie.powerState("off");
        BlinkerAliGenie.print();
    }
    else if (state == BLINKER_CMD_OFF) {
        digitalWrite(LED_BUILTIN, HIGH);
digitalWrite(pinRelay, HIGH);
        BlinkerAliGenie.powerState("on");
        BlinkerAliGenie.print();
    }
}
*/

void setup() {
    // 初始化串口
    Serial.begin(115200);
    // 初始化有LED的IO
    pinMode(pinRelay, OUTPUT);
    pinMode(0, OUTPUT);
//    digitalWrite(pinRelay, HIGH);
     digitalWrite(pinRelay, HIGH);
    // 初始化blinker
    Blinker.begin(auth, ssid, pswd);
    Button1.attach(button1_callback);
//    BlinkerAliGenie.attachPowerState(aligeniePowerState);
    Blinker.attachHeartbeat(heartbeat);
}
 
void loop() {
    Blinker.run();
    //Blinker.run()语句负责处理Blinker收到的数据,每次运行都会将设备收到的数据进行一次解析。
//在使用WiFi接入时,该语句也负责保持网络连接
}

 

继电器与220v开关的连接

通过继电器可以控制多数电器的开关,不仅仅限于点灯,比如电脑开关,电机的开关,风扇,洗衣机等功率不是太高的电器。继电器标称的是220v 10A,也就是2200w以下的电器,我们这里为了安全起见,控制1000w以下的电器开关应该没有问题。

在继电器背面,no对应常开,nc对应常闭,com对应公共端。

其中常开的意思就是在用电器没有通电时,继电器其上的触头处于断开状态,只有用电器得电后才有可能变为闭合状态。这种触头称之为“常开触头”,简称“常开”。

而常闭的意思正好相反,在电器没有通电时,其上的触头处于闭合状态,只有电器得电后才有可能变为断开状态。这种触头称之为“常闭触头”,简称“常闭”。

这次测试接的常开,你们也可以自己实验常闭端口。

编辑于 2022-11-01 · 著作权归作者所有
 
 
 
 
 

    标签:

    发布评论 条评论)

    评论列表