目录

一、项目背景

二、OneNET 数据上传与获取的HTTP实现

1.HTTP的工作流程

2. 发送数据至OneNET(POST请求)

3. 从OneNET获取数据(GET请求)

4.集成实现:自动监控与控制逻辑

三、树莓派通过QQ邮箱发送警报邮件

1.SMTP

2. QQ邮箱的SMTP配置

3. 邮件发送代码

四、总结


在本篇中,我们将详细讲解如何使用HTTP协议来实现树莓派与OneNET平台的数据传输以及与QQ邮箱的通信。借助HTTP协议,我们可以通过OneNET实现树莓派传感数据的远程监控,,通过与OneNET平台的对接,机器人能够实时上传采集到的传感器数据,实现远程监控;通过邮件发送功能,机器人还能在监测到异常情况时发送警报,为安保任务提供更多便利。

一、项目背景

安保巡逻机器人需要实时监控环境信息,如温湿度等。OneNET作为物联网数据的云平台,为我们提供了便捷的数据存储与管理方式。通过HTTP协议,我们可以将采集到的数据发送到OneNET上,利用其数据可视化、实时更新等功能,实现设备状态的远程管理。同时,还可以从OneNET获取数据,为后续的数据分析、模型构建等提供支持。

二、OneNET 数据上传与获取的HTTP实现

在物联网领域,HTTP(超文本传输协议)因其简单性和广泛兼容性被广泛用于设备和服务器之间的数据传输。HTTP的请求-响应模式,使得物联网设备能够通过发送请求来完成数据上传、获取数据等操作。OneNET平台作为一个开放的物联网数据管理平台,通过HTTP协议,能够轻松实现与设备之间的数据交互,帮助开发者实现设备的远程监控、管理和数据分析。

1.HTTP的工作流程

在HTTP通信过程中,工作流程主要分为以下几个步骤:

  1. 客户端发起请求:物联网设备(客户端)向服务器发起HTTP请求。请求中包括了请求方法(如GET或POST)、目标URL和请求数据等信息。

  2. 服务器处理请求:服务器接收到HTTP请求后,解码请求信息,根据请求的具体内容进行相应的数据处理或操作。

  3. 返回响应:服务器处理完毕后,生成一个HTTP响应,包含状态码(如200表示成功)和所需的数据,返回给客户端。

  4. 客户端处理响应:客户端收到服务器的响应后,根据返回的数据或状态码执行相应的逻辑处理,完成一个完整的HTTP通信过程。

OneNET - 中国移动物联网开放平台

2. 发送数据至OneNET(POST请求)

OneNET提供了完善的物联网数据管理服务,可以通过HTTP协议实现设备数据的上传与读取。以下是通过HTTP协议上传和获取OneNET数据的实现代码。物联网设备通过HTTP POST请求将采集到的数据上传到OneNET平台,形成数据流。

为了将数据流发送到OneNET,我们通过HTTP POST请求传递数据。以下代码展示了send_data_to_onenet函数的实现:

import requests
import json
import time

DEVICE_ID = "1202111111"  # OneNET 设备ID
API_KEY = "YJ=311111W1=ibQWOgR11111Y="  # OneNET API Key
API_URL = f"http://api.heclouds.com/devices/{DEVICE_ID}/datapoints"  # OneNET API URL

def send_data_to_onenet(name, data):
    """
    发送数据到OneNET平台
    :param name: 数据流名称
    :param data: 要发送的数据值
    """
    headers = {
        "api-key": API_KEY,
        "Content-Type": "application/json"
    }
    payload = {
        "datastreams": [
            {
                "id": name,
                "datapoints": [
                    {"value": data}    
                ]
            }
        ]
    }
    timeout_seconds = 0.5  # 超时时间500毫秒
    try:
        response = requests.post(API_URL, headers=headers, data=json.dumps(payload), timeout=timeout_seconds)
        if response.status_code == 200:
            print(f"{name} 成功发送到 OneNET")
        else:
            print(f"发送 {name} 到 OneNET 失败,状态码: {response.status_code}")
    except requests.exceptions.Timeout:
        print(f"发送 {name} 到 OneNET 超时(500ms 内未完成)")
    except requests.exceptions.ConnectionError:
        print("无法连接到网络")
    except Exception as e:
        print(f"错误: {e}")

3. 从OneNET获取数据(GET请求)

通过HTTP GET请求,我们可以获取设备在OneNET上的数据流,这对监测设备状态非常重要。例如,我们可以在巡逻机器人上读取OneNET上的采集到的数据,根据特定阈值自动调整其工作模式。以下是fetch_data_from_onenet函数的实现:

def fetch_data_from_onenet():
    """
    从OneNET平台获取数据
    """
    headers = {
        "api-key": API_KEY,
    }
    response = requests.get(API_URL, headers=headers)
    if response.status_code == 200:
        data = response.json()
        for datastream in data["data"]["datastreams"]:
            datastream_id = datastream["id"]
            if datastream_id == "humi":  # 假设“humi”是湿度数据流的ID
                datapoints = datastream["datapoints"]
                for datapoint in datapoints:
                    humi = datapoint["value"]  
                    print(f"数据流: {datastream_id}, 值: {humi}, 时间戳: {datapoint['at']}")
    else:
        print("无法从 OneNET 获取数据")

4.集成实现:自动监控与控制逻辑

借助OneNET上的数据流,我们可以设定自动化监控逻辑。例如,若湿度数据大于50,则自动发送pH数据到OneNET。代码如下:

def main():
    while True:
        data = 123  # 模拟的数据值
        send_data_to_onenet("rain", 123)  # 将“rain”数据流上传至OneNET
        fetch_data_from_onenet()  # 从OneNET获取数据
        if humi > 50:  # 如果湿度大于50,发送pH值
            send_data_to_onenet("ph", 5.6)			
        time.sleep(2)  # 每次循环间隔2秒

if __name__ == "__main__":
    main()

借助HTTP协议与OneNET平台,树莓派的安保巡逻机器人可以便捷地实现远程数据监控与自适应控制。通过数据上传与自动化分析,我们可以实现更多的应用场景,如报警系统、设备健康监测等。在未来的开发中,可以进一步优化数据采集频率与传输速度,以便更高效地完成数据处理任务,提升机器人整体性能。

以上便是树莓派与OneNET平台数据交互的基本流程。希望本文的分享对正在进行物联网开发的读者有所帮助!

三、树莓派通过QQ邮箱发送警报邮件

当机器人监测到异常情况时,可以利用QQ邮箱发送邮件警报。这种通信方式简单且实用,适合处理需要人工干预的突发事件。实现树莓派的邮件发送需要设置SMTP服务。

1.SMTP

SMTP(Simple Mail Transfer Protocol,简单邮件传输协议)是用于在电子邮件服务器之间发送和接收邮件的标准协议。SMTP通常由客户端(发件人)发送请求,邮件服务器接收并转发邮件,最终送达接收者。使用SMTP协议,设备或应用可以实现自动发送邮件通知的功能,例如在物联网项目中,借助SMTP服务可以让设备在发生特定事件时发送警报邮件。

SMTP的工作流程可以概括为以下几步:

  1. 建立连接:客户端(如电子邮件客户端或自动化设备)与邮件服务器(SMTP服务器)建立连接。常用的SMTP服务器端口有25(默认端口)、587(支持加密)等。

  2. 发送邮件数据:客户端向SMTP服务器发送邮件数据,包括发件人地址、收件人地址、邮件主题和正文内容等。SMTP服务器会根据这些信息进行邮件的传输。

  3. 邮件传输:SMTP服务器对邮件进行处理,将其转发至目标接收服务器。通过多个SMTP服务器的中转,最终邮件抵达收件人的邮箱。

  4. 关闭连接:邮件发送完成后,客户端断开与SMTP服务器的连接。

2. QQ邮箱的SMTP配置

首先我们需要进行对开启POP3/IMAP/SMTP/Exchange/CardDAV 服务,获取QQ邮箱授权码

首先,QQ邮箱的SMTP服务器信息如下:

  • SMTP 服务器: smtp.qq.com
  • SMTP 端口:587
  • 需要开启SSL加密连接。

请确保在QQ邮箱中启用了SMTP服务,并获取授权码(非QQ邮箱登录密码)。

3. 邮件发送代码

以下是基于Python的邮件发送代码,通过email库将邮件内容及图片附件发送至指定邮箱。

import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.mime.image import MIMEImage

SMTP_SERVER = 'smtp.qq.com'
SMTP_PORT = 587
EMAIL_ADDRESS = '123@qq.com'  # 发送方邮箱
EMAIL_PASSWORD = 'purmse11111111'  # QQ邮箱授权码
image_paths = ["/home/pi/temp/myjob/5.jpg"]  # 要发送的图片路径

def send_email_task(subject, body, to_email, image_paths=None):
    """
    发送邮件至指定邮箱
    :param subject: 邮件主题
    :param body: 邮件内容
    :param to_email: 收件人邮箱
    :param image_paths: 附件图片路径(可选)
    """
    msg = MIMEMultipart()
    msg['Subject'] = subject
    msg['From'] = EMAIL_ADDRESS
    msg['To'] = to_email

    text_part = MIMEText(body)
    msg.attach(text_part)

    # 添加图片附件
    if image_paths:
        for image_path in image_paths:
            with open(image_path, 'rb') as img_file:
                image_part = MIMEImage(img_file.read(), name=image_path)
            msg.attach(image_part)

    try:
        server = smtplib.SMTP(SMTP_SERVER, SMTP_PORT)
        server.starttls()  # 开启TLS加密
        server.login(EMAIL_ADDRESS, EMAIL_PASSWORD)
        server.sendmail(EMAIL_ADDRESS, to_email, msg.as_string())
        print("邮件发送成功")
    except Exception as e:
        print("邮件发送失败:", e)
    finally:
        server.quit()

# 示例调用
# send_email_task("警报", "巡逻机器人发现异常情况!", "330222222@qq.com", image_paths)

借助QQ邮箱的SMTP功能,机器人可以在发生警报时及时发送邮件通知管理员。在实际项目中,我们可以将此邮件功能与异常检测逻辑结合,实现智能化的安保机器人报警系统。

这样,树莓派的安保巡逻机器人能够进一步提升安保管理的便利性与可靠性,为安保巡逻工作带来更多可能性。

四、总结

通过以上步骤,我们成功实现了树莓派与OneNET平台以及QQ邮箱的通信,进一步提升了安保巡逻机器人的数据交互与智能通知能力。借助OneNET的远程数据监控,机器人能够实时更新环境数据并进行自主决策,从而实现自动化和更精细的控制。此外,机器人在检测到异常情况时,还可以利用QQ邮箱发送即时警报,保障巡逻工作的及时性和可靠性。

本篇内容展示了如何在物联网环境下通过简单易用的HTTP和SMTP协议实现数据传输和警报系统,这不仅拓宽了树莓派的应用范围,也为物联网开发提供了更多便利。在未来的项目中,我们可以进一步优化通信效率、扩展传感器种类、提升数据处理速度,打造更加智能化的安保巡逻系统。希望本篇的分享能够为您的物联网项目开发提供有价值的参考!

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐