【树莓派】树莓派使用python、E16 GPRS模块向MQTT服务器传输数据

树莓派连接E16 GPRS模块

模块:塔石E16 GPRS模块 MQTT版本
在这里插入图片描述

1、硬件连接

示意图E16模块错位了,应该接PIN3,PIN4

image-20210518124530298

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()             


  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值