树莓派MQTT的物联网IOT方案案例

在之前的文章里已经简单介绍了MQTT协议,这里结合树莓派+按钮开关(输入)和继电器(输出)制作一个简单的物联网MQTT案例来演示现场端设备与云端服务器的数据信息采集和远程控制功能。

案例流程架构图:


数据采集:
现场端按钮开关的开关状态情况还有树莓派自身的信息,通过树莓派联网发送到云端服务器,人可以用手机或电脑在云端网站页面里看到信息。

远程控制:
人在人可以用手机或电脑在云端网站网站页面里进行点击输入操作,树莓派接收到云服务器发来的远程控制指令,树莓派通过GPIO接口通断信号控制现场继电器的吸合和断开。

准备阶段工作:
现场端工作:
1、准备好树莓派主板通上电,安装好Raspberry Pi OS系统
2、按钮开关和继电器接到树莓派的GPIO模块接口
云端网站工作:
1、准备好云端服务器配置好网络和IP,这里安装好LAMP网站应用环境(Linux+Apache+Mysql+PHP/Python),关键是mysql数据库结构,为之后的python编程和网站编程制作做好数据对接准备
2、安装MQTT服务端,关键是构思好发送和订阅的数据结构,为之后的python编程做发送指令和接受信息的拼接、转变、解析等做准备。

python编程阶段工作:
一、树莓派里运行的python:
1、按钮开关的数据采集:
(1)监控GPIO输入状态
(2)MQTT发布:状态信息
2、控制输出给继电器:
(1)订阅MQTT信息
(2)控制GPIO输出
(3)MQTT发布:回复控制状态
3、树莓派自身信息的心跳数据:
(1)获取树莓派自身数据信息
(2)MQTT发布:树莓派心跳信息
二、服务器里运行的python:
1、数据采集:
订阅MQTT各种数据消息,数据放入mysql
2、远程控制:
(1)收到mysql里控制线圈信息
(2)发布MQTT消息:控制线圈

PHP网站搭建阶段工作:
1、这里做法是用html/CSS/JS制作如上图里的前端人机交互的页面,显示相关数据信息和设置按钮操作。
2、后台里用PHP做html页面与mysql数据库之间的数据对接传输分析转换的接口用来调取。

这里用最简单的开关量设备案例做演示说明,举一反三现场端的其他类型设备,比如Modbus、温度、湿度、串口等,也可通过这样的方式做物联网的数据采集传输分析和远程控制

MQTT结合Python将树莓派与云端组网

MQTT(消息队列遥测传输)是ISO 标准(ISO/IEC PRF 20922)下基于发布/订阅范式的消息协议。它工作在 TCP/IP协议族上,是为硬件性能低下的远程设备以及网络状况糟糕的情况下而设计的发布/订阅型消息协议,MQTT是一个基于客户端-服务器的消息发布/订阅传输协议。MQTT协议是轻量、简单、开放和易于实现的,这些特点使它适用范围非常广泛。在很多情况下,包括受限的环境中,如:机器与机器(M2M)通信和物联网(IoT)。其在,通过卫星链路通信传感器、偶尔拨号的医疗设备、智能家居、及一些小型化设备中已广泛使用。

安装MQTT:
apt-get install mosquitto
apt-get install mosquitto-clients
apt-get install mosquitto-dev

本机测试:
打开一个终端,执行以下命令订阅主题”mqtt”
mosquitto_sub -h localhost -t “mqtt” -v

打开另外一个终端,发布消息到主题 “mqtt”
mosquitto_pub -h localhost -t “mqtt” -m “Hello MQTT”

现在你会看到消息被显示在前一个终端上了
将localhost更换成服务器IP就是可远程操作MQTT

 

MQTT添加用户权限:
编辑文件:sudo nano /etc/mosquitto/mosquitto.conf
添加如下信息:
allow_anonymous false       #不允许匿名使用
password_file /etc/mosquitto/pwfile  #用户账号密码文件位置

添加用户指令:
sudo mosquitto_passwd -c /etc/mosquitto/pwfile {用户名}
然后输入确认密码

MQTT服务重启:
sudo mosquitto -c /etc/mosquitto/mosquitto.conf
sudo service mosquitto restart
或重启服务器 sudo reboot

测试用户权限,发送和订阅指令带有用户信息
mosquitto_sub -h localhost -t “mqtt” -v -u {用户名} -P {密码}
mosquitto_pub -h localhost -t “mqtt” -u {用户名} -P {密码} -m “Hello MQTT”

MQTT调试工具MQTT.fx 是目前主流的mqtt客户端,可以快速验证是否可以与IoT Hub 服务交流发布或订阅消息。

Python paho-mqtt 模块使用
安装:pip install paho-mqtt

MQTT订阅消息的python案例:
import paho.mqtt.client as mqtt

def on_connect(client, userdata, flags, rc):
print(“Connected with result code “+str(rc))

def on_message(client, userdata, msg):
print(msg.topic+” “+str(msg.payload))

client = mqtt.Client()
client.on_connect = on_connect
client.on_message = on_message
client.connect(“{ip}”, 1883, 60)
client.loop_forever()

MQTT发布消息的python案例:
import paho.mqtt.client as mqtt

def on_connect(client, userdata, flags, rc):
print(“Connected with result code “+str(rc))

def on_publish(client, userdata, msg):
print(“payload=”,payload)

payload = {‘key’:’value’}

client = mqtt.Client()
client.on_connect = on_connect
client.on_publish = on_publish
client.connect(“{ip}”, 1883, 60)
client.publish(‘mqtt’,payload=str(payload),qos=0)

MQTT中的QoS等级
MQTT设计了一套保证消息稳定传输的机制,包括消息应答、存储和重传。在这套机制下,提供了三种不同层次QoS(Quality of Service):

QoS0,At most once,至多一次;
QoS1,At least once,至少一次;
QoS2,Exactly once,确保只有一次。
QoS 是消息的发送方(Sender)和接受方(Receiver)之间达成的一个协议:

QoS0 代表,Sender 发送的一条消息,Receiver 最多能收到一次,也就是说 Sender 尽力向 Receiver 发送消息,如果发送失败,也就算了;
QoS1 代表,Sender 发送的一条消息,Receiver 至少能收到一次,也就是说 Sender 向 Receiver 发送消息,如果发送失败,会继续重试,直到 Receiver 收到消息为止,但是因为重传的原因,Receiver 有可能会收到重复的消息;
QoS2 代表,Sender 发送的一条消息,Receiver 确保能收到而且只收到一次,也就是说 Sender 尽力向 Receiver 发送消息,如果发送失败,会继续重试,直到 Receiver 收到消息为止,同时保证 Receiver 不会因为消息重传而收到重复的消息。

QoS等级使用建议
在以下情况下你可以选择 QoS0:
Client 和 Broker 之间的网络连接非常稳定,例如一个通过有线网络连接到 Broker 的测试用 Client;可以接受丢失部分消息,比如你有一个传感器以非常短的间隔发布状态数据,所以丢一些也可以接受;
你不需要离线消息。

在以下情况下你应该选择 QoS1:
你需要接收所有的消息,而且你的应用可以接受并处理重复的消息;
你无法接受 QoS2 带来的额外开销,QoS1 发送消息的速度比 QoS2 快很多。

在以下情况下你应该选择 QoS2:
你的应用必须接收到所有的消息,而且你的应用在重复的消息下无法正常工作,同时你也能接受 QoS2 带来的额外开销。

 

用树莓派处理文档和图片方法分享

上篇文章讲了,树莓派系统版本更新了,可以方便的使用HP打印机了,联想到用树莓派来处理各种文档和图片,比如Office文件word\excel\PPT、图片图纸等。这里给大家介绍下在树莓派处理这些文件需要安装哪些软件。

Office文件,这里推荐软件LibreOffice
LibreOffice 中的各个组件,包括:Writer(文字处理),Calc(电子表格),Impress(演示文稿),Draw(矢量绘图),Base(数据库),以及 Math(公式编辑)。

安装LibreOffice:sudo apt-get install libreoffice
安装LibreOffice中文包: sudo apt-get install libreoffice-help-zh-cn libreoffice-help-zh-tw libreoffice-l10n-zh-cn libreoffice-l10n-zh-tw
安装中文输入法:sudo apt-get install scim-pinyin



利用LibreOffice也可处理常用的Office文件格式word:.doc\.docx,excel:.xls\.xlsx\.csv,PPT:.ppt/.pptx。

图片文件处理,这里推荐GIMP和Inkscape
GIMP是GNU Image Manipulation Program(GNU图像处理程序)的缩写,包括几乎所有图像处理所需的功能,号称Linux下的PhotoShop。

利用GIMP可输出.jpg、.png、.gif等常用图片格式
安装GIMP:sudo apt install gimp

Inkscape是一款自由及开源的矢量图形编辑软件,功能类似AI。

利用Inkscape可输出.svg、.png等常用图片格式
安装Inkscape:sudo apt install inkscape

图纸CAD处理,这里推荐LibreCAD
LibreCAD 是一款开源免费的 2D CAD 制图软件

利用LibreCAD可以处理.dxf格式等常用CAD文件,也可输出PDF、图片或svg。
安装LibreCAD:sudo apt install librecad

三维模型动画处理,这里推荐Blender
Blender 是一款开源的跨平台全能三维动画制作软件,提供从建模、动画、材质、渲染、到音频处理、视频剪辑等一系列动画短片制作解决方案。
利用Blender可以输出常用的三维模型文件格式:.obj/.stl等,还可以渲染出图像和视频。
安装Blender:sudo apt install blender

树莓派的其他玩法,大家可以继续在这里分享。

树莓派系统版本202012更新

说起树莓派的系统更新,先讲下树莓派官网的更新:https://www.raspberrypi.org/
已有介绍树莓派400。

进入下载系统OS位置上图官网这里:Software > Raspberry Pi OS,该页上面是介绍Raspberry Pi Imager,看来曾经的NOOBS已成历史,往下翻这里点击进去就可以看到树莓派各系统镜像了

这样树莓派系统镜像下载地址也更新了:https://www.raspberrypi.org/software/operating-systems/

这里用Raspberry Pi OS with desktop树莓派桌面系统来介绍,下载好系统镜像文件,老样子利用磁盘映象工具往SD卡里装系统

系统配置流程基本不变,安装后发现如更新说明里的那样,树莓派的首选项里有了打印设置还有已内置HP打印机的驱动

正好有个HP网络打印机,开机就可以直连,利用VNC也就可以远程控制打印机了。正好有个HP网络打印机,开机就可以直连,利用VNC也就可以远程控制打印机了,其他用法好像与以前差不多,有新发现之后与大家分享。

辰匠科技DIY创意设计3D打印简介

3D打印(3DP)即快速成型技术的一种,又称增材制造,它是一种以数字模型文件为基础,运用粉末状金属或塑料等可粘合材料,通过逐层打印的方式来构造物体的技术。
这里将3D打印分成3个步骤:
1、三维建模
2、模型文件、打印配置转换成打印文件(G代码)
3、打印模型

一、三维建模:利用CAD(计算机辅助设计Computer Aided Design)电脑软件,将要制造的物件建立虚拟三维模型,然后生成在用于3D打印的文件,一般文件格式为STL、OBJ等。
STL:(stereolithography,光固化立体造型术的缩写)是由3D SYSTEMS 公司于1988 年制定的一种为快速原型制造技术服务的三维图形文件格式。
OBJ:是Alias|Wavefront公司为它的一套基于工作站的3D建模和动画软件”Advanced Visualizer”开发的一种标准3D模型文件格式,

这里把建模分类为工业建模和艺术建模:
工业建模:着重于成品尺寸的准确性,比如长宽高、孔轴直径、公差配合、内外螺纹、齿轮啮合等。建模软件有:autoCAD、UGNX、SolidWorks等

艺术建模:着重于成品的外形,一般可用在礼品、艺术品等设计上。建模软件有:MAYA、3Dmax等

二、模型文件、打印配置转换成打印文件(G代码)
经过三维建模生成了STL、OBJ模型文件,导入3D打印软件后一般还需要设置打印工艺参数:
(1)成型参数:层高(mm)、外壳厚度(mm)、顶部/底部厚度(mm)、填充度(%)等;
(2)打印工艺参数:打印速度(mm/s)、打印温度(℃)、热床温度(℃)、支撑类型、平台附着类型等;
(3)原料线材参数:线材直径(mm)、流量(%);

需要对成品需求和实际情况来分析后对这些参数的进行设置。这样也可预估出用料量和打印时间,最后生成打印文件G代码。
G代码(G-code,又称RS-274),是最为广泛使用的数控(numerical control)编程语言,有多个版本,主要在计算机辅助制造中用于控制自动机床。G代码是数控程序中的指令。一般都称为G指令。使用G代码可以实现快速定位、逆圆插补、顺圆插补、中间点圆弧插补、半径编程、跳转加工。

三、打印模型
准备好3D打印机、线材、G代码文件

开机后一般需要调整Z轴0平面,打印时设置好进给率,不出意外的话等待一段时间后成品就会打完
最后拿出成品一般还需要去毛刺、再做微调加工、上色等完成制作。