树莓派连接E16 GPRS模块
模块:塔石E16 GPRS模块 MQTT版本
1、硬件连接
示意图E16模块错位了,应该接PIN3,PIN4
2、串口调试
需要安装minicom,可参考https://blog.csdn.net/cw_huang/article/details/117060235
python测试代码:
发送命令:
import serial
import time
ser = serial.Serial("/dev/ttyAMA0",115200)
# 发送数据,必须是\r\n,需要使用encode()进行编码,否则会报错
ser.write("ATI\r\n".encode())
time.sleep(0.1)
# 读取
ser.read(ser.inWaiting())
3、读取CPU温度
def getCPUtemperature():
res = os.popen('vcgencmd measure_temp').readline()
return(float(res.replace("temp=","").replace("'C\n","")))
4、向mqtt服务器发送信息
读取核心温度,发送至EMQX服务器
要先安装串口库
import serial
import time
import json
import random
from datetime import datetime
import os
# 打开串口
MQTT_SERVER = "XX.XX.XX.XX" #EMQX 服务器地址
CLIENT_ID = "CLIENT_ID"
TOPIC = "HVAC/SZJK-WSD/propety/post"
username='username'
password='password'
# 打开串口
ser = serial.Serial("/dev/ttyAMA0", 115200)
def getCPUtemperature():
res = os.popen('vcgencmd measure_temp').readline()
return(float(res.replace("temp=","").replace("'C\n","")))
def SetPara(MQTT_SERVER,CLIENT_ID,username,password,uart):
uart.write(('AT+IPPORT="{}",1883\r\n'.format(MQTT_SERVER)).encode())
time.sleep(0.1)
uart.read(uart.inWaiting()) # 简易程序,仅虚读未进行判断
uart.write(('AT+DEVICEID="{}"\r\n'.format(CLIENT_ID)).encode())
time.sleep(0.1)
uart.read(uart.inWaiting()) # 简易程序,仅虚读未进行判断
uart.write(('AT+USERPWD="{}","{}"\r\n'.format(username,password)).encode())
time.sleep(0.1)
uart.read(uart.inWaiting()) # 简易程序,仅虚读未进行判断
uart.write(("AT+CFUN=1,1\r\n".encode())) # reset
time.sleep(5)
uart.read(uart.inWaiting()) # 简易程序,仅虚读未进行判断
def SendMessage(topic,message,qos,uart):
uart.read(uart.inWaiting())
a=('AT+PUBLISH="{}",{},{}\r\n'.format(topic,len(message),qos)).encode()
uart.write(a)
time.sleep(0.1)
rec=uart.read(uart.inWaiting())
if(rec == b'\r\n> '):
uart.write(message.encode())
time.sleep(0.1)
return uart.read(uart.inWaiting())
msg = {"event_time":"","event_date":"","iot_id":"ID","product_key":"SZJK-WSD","type":"DEVICE","humidity":-1,"temperature":0}
def main():
while True:
# msg["humidity"]=random.randint(10,90)
msg["temperature"]=getCPUtemperature()
msg["event_time"]=datetime.now().strftime('%Y-%m-%d %H:%M:%S')
msg["event_date"]=datetime.now().strftime('%Y-%m-%d')
SendMessage(TOPIC,json.dumps(msg),0,ser)
time.sleep(60)
if __name__ == '__main__':
try:
main()
except KeyboardInterrupt:
if ser != None:
ser.close()