树莓派识别ID\IC卡的RFID联网案例简介

射频识别(RFID)是 Radio Frequency Identification 的缩写。其原理为阅读器与标签之间进行非接触式的数据通信,达到识别目标的目的。RFID 的应用非常广泛,典型应用有动物晶片、汽车晶片防盗器、门禁管制、停车场管制、生产线自动化、物料管理。日常生活工作中,常见的RFID标签就有:ID、IC感应卡或钥匙圈

ID 卡全称身份识别卡(Identification Card),是一种不可写入的感应卡,含固定的编号,一般会标注在卡片上。ID 卡属于低频卡,工作频率一般是 125KHz-1000Khz。

IC 卡全称集成电路卡(Integrated Circuit Card),又称智能卡(Smart Card),可读写,容量大,有加密功能,数据记录方便。IC 卡一般是 13.56MHz 的高频卡,跟手机 NFC 工作频率一样。所以手机 NFC 可以模拟未加密的 IC 卡,不能模拟 ID 卡。

这里树莓派识别ID\IC卡利用RFID射频感应模块:
ID卡识别利用STC15模块;IC卡识别利用的是PN532模块

RFID射频感应模块与树莓派通信采用TTL串口,TX与RX交错相接即可。

然后对树莓派运行的python编程,原理是往串口发送读卡指令,接收感应模块从串口发来的消息,并对消息进行分析得到ID\IC卡号。

如果获取到卡号信息后,之后可以做数据传输操作比如MQTT发布消息或写入MYSQL数据库等。

最后可以按项目情况做成各种应用,比如:在手机里查看刷卡记录。

关于RFID或是树莓派的其他玩法,大家可以一起来交流。

树莓派物联网工具软件Node-RED简介

之前介绍过很多基于树莓派与python的物联网技术方案和案例。这次给大家介绍个可方便实现物联网的软件工具:Node-RED。

Node-RED 是构建物联网(IOT, Internet of Things)应用程序的一个强大工具,其重点是简化代码块的“连接”以执行任务。它使用可视化编程方法,允许开发人员将预定义的代码块(称为“节点”,Node)连接起来执行任务。连接的节点,通常是输入节点、处理节点和输出节点的组合,当它们连接在一起时,构成一“流”(Flows)。

Node-RED最初是IBM在2013年末开发的一个开源项目,以满足他们快速连接硬件和设备到Web服务和其他软件的需求——作为物联网的一种粘合剂,它很快发展成为一种通用的物联网编程工具。重要的是,Node-RED已经迅速形成一个重要的、不断增长的用户基础和一个活跃的开发人员社区,他们正在开发新的节点,同时允许程序员复用Node-RED代码来完成各种各样的任务。

如果安装树莓派的系统是带有推荐软件的(Raspberry Pi OS with desktop and recommended software),一般会已经带有这个Node-RED,在编程的菜单里。

打开后会自动启动一个终端命令框。

这里会告诉你,用树莓派或联网的电脑浏览器打开:树莓派IP:1880(端口),还有些命令可开启或停止Node-Red、输出日志、开机自启或不自启。
打开后Node-Red的界面:

如果树莓派的系统没有带推荐软件Node-RED,就需要手动安装从node.js、npm开始。
打开终端安装指令:
apt install nodejs
apt install npm
npm install -g –unsafe-perm node-red
启动指令:
node-red   #(默认端口:1880)
node-red -p 8080    #(自定义端口号:8080或其他)
安装后打开方式一样,在浏览器内打开:树莓派IP:(端口号)。
安装好的Node-RED会带些通用的节点,但还需按各种项目情况要求安装各种节点组件,比如树莓派的GPIO、串口协议、modbus协议、mysql数据库、OPC UA/DA等,可在右上角的设置选择安装。
这里介绍些简单的节点工作案例:
硬件上,拿个开关按钮和一个二极管指示灯接在树莓派的GPIO。
在Node-RED里放上树莓派节点:rpi-gpio-in和rpi-gpio-out,和一个debug调试信息输出的节点,配置完成连上线后点击界面右上角的“部署”按钮。
当按下或松开按钮,指示灯会对应亮灭,界面里调试窗口里会显示对应的信息。


我们也可以在其中插入个函数function节点,写入代码做简单的处理。比如这里的开关状态的置反处理。


我们也可以用MQTT协议做为信息输入,这里用上次的树莓派自身心跳MQTT案例

然后里用函数function节点做信息解析,提取树莓派CPU温度信息。

这里先用这2个案例,简单介绍下Node-Red的工作运行方式和联网通信的方式。
节点完成后,可导出json文件做保存备份。

当遇到物联网项目不是很复杂的情况下,基本是可以利用这个Node-Red放入节点部署运行即可。
如果项目比较复杂了,也可利用Node-Red做为一个工作环节可与云端或自身的做mqtt或http做通信、或是数据库连接、也或是与工业协议modbus、OPC等联接等,然后可在云端或树莓派自身里再用python编程做复杂处理。为解决项目问题、满足项目要求提供了解决办法和多些玩法。

 

 

 

 

 

树莓派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 带来的额外开销。