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

本文介绍如何通过树莓派控制E16GPRS模块实现与EMQX服务器的MQTT通信,包括硬件连接、串口调试及发送CPU温度数据的具体步骤。
部署运行你感兴趣的模型镜像

树莓派连接E16 GPRS模块

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

1、硬件连接

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

image-20210518124530298

2、串口调试

需要安装minicom,可参考https://blog.youkuaiyun.com/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()             


您可能感兴趣的与本文相关的镜像

Python3.10

Python3.10

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值