使用继电器驱动直流电机
一、材料
esp8266 NodeMCU 开发板一个
5V 高电平继电器 一个
直流电机一个
5V的外置电源一个
我这里因为没有外置5V的电源,我直接用另外一块开发板代替的,你们家里如果有那种5V电源的话,换成5V电源即可
各种线若干,我这里用的就是杜邦线
二、电路图
在制作之前,我们先要画好电路图确定我们整体的接线,以下就是我的电路图,(画的不那么专业,意思意思)
三、编写代码
首先是espjs代码
// 我们这里设置 D0引脚为信号输出模式
NodeMCU.D0.mode('output')
//导入wifi模块
var wifi = require('Wifi');
var mqtt = require('modules/MQTT.min.js');
// wifi名称
var WIFI_NAME = "GZRJ123";
// wifi 参数
var WIFI_OPTIONS = {
password: "rjzx123456",
};
console.log("connecting...");
initWifi();
/**
* @description 初始化wifi
*/
function initWifi() {
//已连接wifi的事件
wifi.on('connected', function () {
wifi.getIP((err, info) => {
if (err !== null) {
throw err;
}
//获取一下所在wifi下的局域网IP地址
console.log(info.ip, 'connected');
connectMQTTServer();
});
});
// 连接wifi
wifi.connect(WIFI_NAME, WIFI_OPTIONS, err => {
if (err !== null) {
throw err;
}
});
}
/**
* @description 连接MQTT服务器
*/
function connectMQTTServer() {
//初始化mqtt
var client = mqtt.connect({
host: '192.168.1.102',
port: 1883,
username: "user",
password: '123456'
});
// 监听连接成功 回调
client.on('connect', () => {
console.log('connected success ...');
client.subscribe('topic/DCMotor/start', { qos: 1 });
});
//监听消息
client.on('message', (topic, message) => {
console.log('message success ...');
// 当有发布 'topic/DCMotor/start' 主题消息的时候我才接受
if (topic == 'topic/DCMotor/start') {
//由于我们使用的继电器是高电平继电器 那么D0输出高电平的时候 继电器就会闭合
var status = message == 'off' ? 0 : 1
digitalWrite(NodeMCU.D0, status);
// 输出成功后 发送一个操作成功的信号
client.publish('/topic/success',{qos:1})
}
})
}
其次是搭建Nodejs的MQTT服务,这个上篇文章说,这里就不重复了
四、编写app连接搭建的MQTT服务控制开发板
上次是使用的是前端网页来控制这个开发板的灯亮和灯灭,今天换一下终端技术,我使用flutter 构建一个app来玩这个项目,最后的效果如下