使用MQTT远程控制树莓派继电器开关
一、MQTT服务器(emqx)搭建
连接:安装 | EMQ X 文档
根据文档进行安装,文档里面包含各种系统安装方式,可以根据服务器系统进行选择,因为我这边用的是阿里云的centos系统服务器,所以具体安装方式如下:
1.安装所需要的依赖包
$ sudo yum install -y yum-utils device-mapper-persistent-data lvm2
2.使用以下命令设置稳定存储库,以 CentOS 7 为例
$ sudo yum-config-manager --add-repo https://repos.emqx.io/emqx-ce/redhat/centos/7/emqx-ce.repo
3.安装最新版本的 EMQ X Broker
$ sudo yum install emqx
如果提示接受 GPG 密钥,请确认密钥符合 fc84 1ba6 3775 5ca8 487b 1e3c c0b4 0946 3e64 0d53,并接受该指纹。
4.启动 EMQ X Broker
$ emqx start
到这一步,我们的emqx服务就已经启动了,下面我们尝试访问EMQ X Dashboard
首先要确保你的服务器要开放18083和1883端口,这两个端口一个是用于访问EMQ X Dashboard,另一个是用于MQTT连接,我这边是在阿里云配置规则里面进行操作
端口开放好后 我们尝试访问http://你的服务器公网ip:18083
默认账号密码是 admin,public
现在我们的mqtt服务器就搭建成功了。
二:电路连接
准备硬件:树莓派一块、2路继电器一块
我这边选用的是树草莓4B和5V继电器模块
接线:
树莓派5V引脚接继电器电源正极,树莓派GND引脚接继电器电源负极
(由于我选用的是5V继电器与树莓派的电压相同,所以树莓派可以直接给继电器供电)
树莓派GPIO14接继电器IN1,GPIO15接继电器IN2
(树莓派的引脚定义不必多说了吧,不清楚的话可以使用命令gpio readall 查看)
三:编写控制程序
参考连接:在树莓派上使用 MQTT | EMQ
#subscriber.py
import paho.mqtt.client as mqtt
import RPi.GPIO
import time
IN1 = 14 #继电器IN1引脚连接到树莓派BCM编码的14引脚
IN2 = 15 #继电器IN1引脚连接到树莓派BCM编码的15引脚
RPi.GPIO.setwarnings(False)
RPi.GPIO.setmode(RPi.GPIO.BCM)
RPi.GPIO.setup(IN1,RPi.GPIO.OUT) #IN1设为输出
RPi.GPIO.setup(IN2,RPi.GPIO.OUT) #IN2设为输出def on_connect(client,userdata,flags,rc):# 订阅,需要放在 on_connect 里# 如果与 broker 失去连接后重连,仍然会继续订阅 raspberry/topic 主题print("Connected with result code"+str(rc))client.subscribe("raspberry/topic")
# 回调函数,当收到消息时,触发该函数
def on_message(client,userdata,msg):
# 如果收到的消息为"p1" 打开继电器1if msg.payload == 'p1':RPi.GPIO.output(IN1,1)RPi.GPIO.output(IN2,0)
# 如果收到的消息为"p2" 打开继电器2elif msg.payload == "p2":RPi.GPIO.output(IN1,0)RPi.GPIO.output(IN2,1)
# 如果收到的消息为"stop" 关闭所有继电器elif msg.payload == "stop":RPi.GPIO.output(IN1,0)RPi.GPIO.output(IN2,0)print(str(msg.payload))client = mqtt.Client()
client.on_connect = on_connect
client.on_message = on_messageclient.will_set('raspberry/status', b'{"status": "Off"}')
client.connect("你的服务器公网ip",1883,60)
client.loop_forever()
四.测试
1.在树莓派上打开终端,运行python代码,监听消息
python subscriber.py
2.下载mqttfx 客户端工具
3.使用mqttfx 客户端与mqtt服务器建立连接,并向 raspberry/topic 发送消息
使用 MQTT.FX客户端工具的Publish 想raspberry/topic发送消息 p1
此刻可以听到继电器1路的打开声音。
可以继续尝试发送p2,可以看到继电器1路关闭,继电器2路打开,发送stop 可以看到继电器全部关闭。
继电器可以接入直流电机控制电机正转反转以及停止,除此之外还可以接入其他负载。
使用MQTT远程控制树莓派继电器开关相关推荐
- 树莓派控制4路5v继电器开关
树莓派控制4路5v继电器开关 准备材料 wiringPi库 安装wiringPi库 查看引脚编号表格 wiringPi API 硬件初始化函数wiringPiSetup GPIO控制函数pinMode ...
- 树莓派/继电器DIY朴素的远程空调遥控器
这篇文章是事后所作,由于今天下午老婆和小小已经回来,所以我便不再需要远程空调遥控了,但不管怎样,我假装我仍然需要这个东西,毕竟这是我在她们回来之前亲自做出来的,并且真的可用. 当她们刚回到家里的时 ...
- 航模遥控继电器单通道控制2路继电器开关实现原理解析
航模遥控继电器单通道控制2路继电器开关实现原理解析 航模遥控继电器 硬件解析 两路型号为: SRD-05VDC-SL-C 继电器 2个PC817光耦 3个S4,1N5819WS肖特基二极管 2个S80 ...
- 花 1 小时,开源设计 LoRa 继电器开关
提示1:锐米所有 LoRa 产品严格遵循国际标准的 LoRaWAN 协议. 提示2:您可以免费复制,修改和商用本项目,请注明锐米原创. 提示3:如果您有其他 LoRa 需求或建议,欢迎联系锐米 sup ...
- 【微信小程序控制硬件 第13篇】安信可B站直播学习总结,微信小程序MQTT远程控制ESP8266 NodeMCU,谈谈微信生态那些事;
[微信小程序控制硬件第1篇 ] 全网首发,借助 emq 消息服务器带你如何搭建微信小程序的mqtt服务器,轻松控制智能硬件! [微信小程序控制硬件第2篇 ] 开始微信小程序之旅,导入小程序Mqtt客户 ...
- 基于I-MX287A的mqtt远程控制ARM板上LED灯小项目总结
最近在学linux嵌入式技术,自己做了一个在周立功的I-MX287A开发板上实现的,基于MQTT远程控制的小项目,其中用到了一些比较好玩和有趣的技术,在这里自己记录分享一下. 额,让我想想该从和处开始 ...
- 《树莓派开发实战(第2版)》——2.8 利用VNC远程控制树莓派
本节书摘来异步社区<树莓派开发实战(第2版)>一书中的第2章,第2.8节,作者:[英]Simon Monk(蒙克),更多章节内容可以访问云栖社区"异步社区"公众号查看. ...
- 《树莓派开发实战(第2版)》——2.9 利用RDP远程控制树莓派
本节书摘来自异步社区<树莓派开发实战第2版>一书中的第2章第2.9节作者[英]Simon Monk蒙克韩波 译更多章节内容可以访问云栖社区"异步社区"公众号查看. 2. ...
- 用Arduino远程控制车库门开关
"我用一个以太网插板负载到Arduino上.如此我便实现了打开我的车库门--就是这样! 我也安装了一个磁传感器,门是开着的或者封闭的都可以让我知道.所有都通过Telnet实现. 我修改了来自 ...
最新文章
- Arcgis桌面开发,Python引用GDAL库的方法
- 百度地图同时显示多个路书
- 小白自学深度学习——目录
- 基于FPGA的ADC和DAC设计
- idea的setting界面怎么进_电脑怎么备份系统
- 安装教程rtx2080ti_点云深度学习环境配置指南(一)Ubuntu16.04+RTX2080ti
- swift 怎样查看xcode 版本对应的swift版本和 iOS 等其他系统版本
- 王者荣耀显示聊天服务器异常,王者荣耀功能存在异常暂时关闭怎么回事 解决办法...
- mysql表utf-8 字符串入库编码异常
- 23篇大数据系列(三)sql基础知识(史上最全,建议收藏)
- 知网免费下载期刊文献
- vue mand-mobile ui加class不起作用的问题 css权重问题
- vs 2013 必须先停止生成方可关闭解决方案
- 深度学习之父Geoffrey Hinton:我的五十年深度学习生涯与研究心得
- IT职场人生系列之二十三:知识体系(专家与杂家)
- c/c++进阶之爱恨交织的临时对象: 二、天使与魔鬼
- yarn computed integrity doesn‘t match our records 错误
- 【新版发布】ComponentOne 新增 .NET 6 和 Blazor 平台控件支持
- 深度:震惊世间的惊人代码(附完整代码)
- aspose win/linux WORD转PDF(及其解决乱码方式)
热门文章
- 形容计算机科学与技术的句子,关于描写未来科技的句子33条
- SpringBoot 启动出现Cannot determine embedded database driver class for database type NONE
- matlab 儒略历 函数,儒略日(儒略日 在线计算器)
- python:大球吃小球
- 100%基于深度强化学习的对冲基金
- C# 输入一个三位数的字符串,输出为三位数的整数,并输出百位、十位、和个位
- JsonProperty.Access.READ_ONLY 导致查询字段为null
- 【计算机网络】DNS域名系统
- H5网页头部的声明应该是用 lang=zh 还是 lang=zh-cn?
- python3.7安装numpy库和matplotlib库_详解Python中的Numpy、SciPy、MatPlotLib安装与配置