连接继电器
1.1 配置号arduino的esp8266环境
1.2安装电灯科技库
名字:Blinker
开发板名字:Generic esp8266
以下脚本可以控制天猫精灵和小爱
#define BLINKER_WIFI
#define BLINKER_MIOT_OUTLET //小爱同学
#define BLINKER_DUEROS_OUTLET
#define BLINKER_ALIGENIE_OUTLET //天猫精灵
#include <Blinker.h>
char auth[] = "bb5faa703f50"; //这里密钥
char ssid[] = "yang1234"; //这里WIFI名称
char pswd[] = "y123456789"; //这里WIFI密码
BlinkerButton Button1("btn-on"); //定义按钮数据
BlinkerButton Button2("btn-off");
bool oState = false;
int counter = 0;
void miotPowerState(const String & state)
{
BLINKER_LOG("need set power state: ", state);
if (state == BLINKER_CMD_ON) { //小爱同学控制开命令
digitalWrite(0, LOW);
BlinkerMIOT.powerState("on");
BlinkerMIOT.print();
oState = true;
}
else if (state == BLINKER_CMD_OFF) { //小爱同学控制关命令
digitalWrite(0,HIGH);
BlinkerMIOT.powerState("off");
BlinkerMIOT.print();
oState = false;
}
}
void miotQuery(int32_t queryCode) //小爱同学控制
{
BLINKER_LOG("MIOT Query codes: ", queryCode);
switch (queryCode)
{
case BLINKER_CMD_QUERY_ALL_NUMBER :
BLINKER_LOG("MIOT Query All");
BlinkerMIOT.powerState(oState ? "on" : "off");
BlinkerMIOT.print();
break;
case BLINKER_CMD_QUERY_POWERSTATE_NUMBER :
BLINKER_LOG("MIOT Query Power State");
BlinkerMIOT.powerState(oState ? "on" : "off");
BlinkerMIOT.print();
break;
default :
BlinkerMIOT.powerState(oState ? "on" : "off");
BlinkerMIOT.print();
break;
}
}
void AliGeniePowerState(const String & state)
{
BLINKER_LOG("need set power state: ", state);
if (state == BLINKER_CMD_ON) { //小爱同学控制开命令
digitalWrite(0, LOW);
BlinkerAliGenie.powerState("on");
BlinkerAliGenie.print();
oState = true;
}
else if (state == BLINKER_CMD_OFF) { //小爱同学控制关命令
digitalWrite(0,HIGH);
BlinkerAliGenie.powerState("off");
BlinkerAliGenie.print();
oState = false;
}
}
void AliGenieQuery(int32_t queryCode) //天猫精灵控制
{
BLINKER_LOG("AliGenie Query codes: ", queryCode);
switch (queryCode)
{
case BLINKER_CMD_QUERY_ALL_NUMBER :
BLINKER_LOG("AliGenie Query All");
BlinkerAliGenie.powerState(oState ? "on" : "off");
BlinkerAliGenie.print();
break;
case BLINKER_CMD_QUERY_POWERSTATE_NUMBER :
BLINKER_LOG("AliGenie Query Power State");
BlinkerAliGenie.powerState(oState ? "on" : "off");
BlinkerAliGenie.print();
break;
default :
BlinkerAliGenie.powerState(oState ? "on" : "off");
BlinkerAliGenie.print();
break;
}
}
void dataRead(const String & data) // 如果未绑定的组件被触发,则会执行其中内容
{
BLINKER_LOG("Blinker readString: ", data);
Blinker.vibrate();
uint32_t BlinkerTime = millis();
Blinker.print("millis", BlinkerTime);
}
void button1_callback(const String & state) //点灯app内控制按键触发
{
digitalWrite(0,LOW);
BLINKER_LOG("get button state:on", state);
}
void button2_callback(const String & state) //点灯app内控制按键触发
{
digitalWrite(0,HIGH);
BLINKER_LOG("get button state:off", state);
}
void setup()
{
Serial.begin(115200);
BLINKER_DEBUG.stream(Serial);
BLINKER_DEBUG.debugAll();
pinMode(0, OUTPUT); //定义io口为输出
digitalWrite(0, LOW); //定义io默认为高电平
Blinker.begin(auth, ssid, pswd);
Blinker.attachData(dataRead);
BlinkerAliGenie.attachPowerState(AliGeniePowerState);
BlinkerAliGenie.attachQuery(AliGenieQuery);
BlinkerMIOT.attachPowerState(miotPowerState);
BlinkerMIOT.attachQuery(miotQuery);
Button1.attach(button1_callback);
Button2.attach(button2_callback);
}
void loop()
{
Blinker.run();
}
3.安装电灯科技app
打开电灯科技→+→独立设备→选阿里云(不然不能语音控制)→点右上角笔添加按钮,
数据键名 | anniu(代码写的有) |
按键类型 | 开关按键 |
显示文本 | 自定义 |
继电器的com和cn可以接电器
NC常闭端,就是继电器bai不通电du,这个端和COM公共端是连通的,触点是闭合的zhi,开关是dao关闭的。通电后,这zhuan端和COM端是断开的。
NO常开端,就是继电器不通电,这端和COM端是断开的,不连通。通电后,和COM端是连通。
用wifimanager待测试,听说不稳定
给个不完全的解决方法吧,这是我免强能接受的用法了,这个用法 依然偶尔会重启, 但起码不是 每次重启了。没有别的办法了,原因我也找不出来
文件头全局变量定义如下(不能在void setup()里定义为局部变量,一样会异常重启), 不要用char ssid[],char* ssid 之类的声明,之后在代码里用memcpy,strlcpy, str.copy()等方法,反复试过了,都是必定会异常重启。要定义为String全局变量
String ssid;
String pswd;
void setup()里的配置里,经过 wifiManager.autoConnect配网成功之后取出ssid和密码 给 string 变量里, 再给Blinker使用。不能在Blinker.begin里这样使用WiFi.SSID().c_str()
Serial.println(F("Connected to Wifi."));
ssid=WiFi.SSID();
pswd=WiFi.psk();
Blinker.begin(auth, ssid.c_str(), pswd.c_str());
WiFiManager全部汉化界面了。
1路5v继电器
/**
说明: 控制继电器
NodeMcu - 继电器
VU - VCC
D5 - OUT
GND - GND
**/
//定义引脚GPIO14,即Nodemcu D5引脚
int relay = 14;
void setup() {
//设置引脚输出
pinMode(relay, OUTPUT);
}
void loop() {
//程序灯带1秒(1000毫秒)
delay(1000);
//设置高电平
digitalWrite(relay, LOW);
delay(1000);
//设置低电平
digitalWrite(relay, HIGH);
}
连线:PA4做in
代码与led类似
D:\stm32\c8t6-继电器\HARDWARE\scr\ji.c
// 硬件连接:
// PC13 LED
#include "stm32f10x.h" //包含需要的头文件
#include "ji.h" //包含需要的头文件
/*-------------------------------------------------*/
/*函数名:初始化继电器函数 */
/*参 数:无 */
/*返回值:无 */
/*-------------------------------------------------*/
void JI_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOA, &GPIO_InitStructure);
//GPIO_SetBits(GPIOA, GPIO_Pin_4);
}
/*-------------------------------------------------*/
/*函数名:继电器开启 */
/*参 数:无 */
/*返回值:无 */
/*-------------------------------------------------*/
void JI_On(void)
{
//GPIO_SetBits(GPIOA, GPIO_Pin_4); //PC13 输出高
GPIO_SetBits(GPIOA, GPIO_Pin_4); //PA4 输出高
}
/*-------------------------------------------------*/
/*函数名:继电器关闭 */
/*参 数:无 */
/*返回值:无 */
/*-------------------------------------------------*/
void JI_Off(void)
{
GPIO_ResetBits(GPIOA, GPIO_Pin_4); //PA4 输出低
}
D:\stm32\c8t6-继电器\HARDWARE\inc\ji.h
#ifndef __JI_H
#define __JI_H
void JI_Init(void); //初始化
void JI_On(void); //点亮所有LED
void JI_Off(void); //熄灭所有LED
#endif
D:\stm32\c8t6-继电器\USER\main.c
#include "ji.h"
int main(void)
{
JI_Init();
while(1)
{
JI_On();
}
}
本文作者: 永生
本文链接: https://yys.zone/detail/?id=205
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明出处!
评论列表 (0 条评论)