我的物联网笔记1——Python+MQTT利用阿里云物联网平台实现图传

MQTT上传图片数据的4G低功耗摄像头解决方案 合方圆的4G低功耗摄像头模组,采用4G低功耗模块G8100作为主控,通过一个USB接口,接一个sony镜头板,通过MQTT,HTTP,TCP/IP ,国网电力平台I1,B1等接口,上传图片,数据到指定的服务器云平台,这种需要4G模块具备能支持多种协议能力。这款摄像头有点高级,这款是一个4G模块控制3个镜头的摄像头,电力国网称的三目输电线路摄像头,简单一点的,可以一个4G主控板,搭配一个镜头板就可以实现MQTT的上传了,具体更多的开发流程,AT指令配置,欢迎评论区留言。4)MQTT可以支持数据透传模式。 阅读详情
AI摘要

本文介绍了一种基于Python和MQTT协议实现图像传输的方法。利用阿里云物联网平台作为消息中转,通过将图像转换为Base64编码进行发送,并在接收端解码,实现了图像的有效传输。

最近实验有需要用到MQTT传输图像的需求,本人也不太会写除Python以外的代码,恰好今天读到嵌入式圈内的大佬@DS小龙哥的文章:基于阿里云物联网平台设计的实时图传系统 _ 采用 MQTT 协议传输图像
受大佬启发,今天利用Python写一个简单的MQTT图传程序。

软件:
Pycharm
MQTTX
Wireshark
手机端APP:IoT MQTT Panel

由于大佬在文章中已经写了关于在阿里云创建产品、设备及消息转发的相关设置,本文将不再赘述,添加设备后如下图所示:
在这里插入图片描述
我们利用Python脚本发送随机数检查设备接收信息的情况:

import time
import json
import random
import paho.mqtt.client as mqtt

#username和password
#可直接在设备页面一键复制
client_id = f"client_id"
timestamp = str(int(time.time()))
username = f"username"
password = f"password"

# MQTT连接地址
broker = f"mqtthosturl"
port = 1883

# 回调函数
def on_connect(client, userdata, flags, rc):
    print("Connected with result code " + str(rc))
    client.subscribe(f"/sys/${ProductKey}/${deviceName}/thing/event/property/post")
    #注意把自己的设备信息更换
def on_message(client, userdata, msg):
    print(msg.topic + " " + str(msg.payload))
# 创建客户端
client = mqtt.Client(client_id=client_id)
client.username_pw_set(username, password)
# 绑定回调函数
client.on_connect = on_connect
client.on_message = on_message
# 连接到阿里云物联网平台
client.connect(broker, port, 60)
# 启动MQTT客户端
client.loop_start()
# 发送随机数的函数
def publish_random_number():
    topic = f"/sys/${ProductKey}/${deviceName}/thing/event/property/post"
    while True:
        random_number = random.randint(1000000000, 9999999999)
        payload = {
            "method": "thing.event.property.post",
            "params": {
                "image": str(random_number)
            }
        }
        client.publish(topic, json.dumps(payload))
        print(f"Published: {json.dumps(payload)}")
        time.sleep(1)

# 启动发送随机数的循环
publish_random_number()


运行此脚本:
在这里插入图片描述
可以在平台的设备监测里看到:
在这里插入图片描述
OK,设备连接正常,下一步我们来搞一下图片传输
由于@DS小龙哥使用的是QT客户端
在这里插入图片描述
我们要用Python实现此功能需要 重新编写脚本,原理很简单,就是将图片转为base64编码,然后发送端建立与平台的连接,通过MQTT协议发送,平台中转给接收端,接收端可以解码此图片呈现。

直接上代码:

import os
import time
import json
import base64
import hmac
import hashlib
import paho.mqtt.client as mqtt

# 阿里云物联网平台的参数
product_key = "product_key"
device_name = "video_1"
device_secret = "device_secret"
region_id = "cn-shanghai"  # 选择你的阿里云区域

#username和password
#可直接在设备页面一键复制
client_id = f"client_id"
timestamp = str(int(time.time()))
username = f"username"
password = f"password"

# MQTT连接地址
broker = f"mqtthosturl"
port = 1883

# 回调函数
def on_connect(client, userdata, flags, rc):
    if rc == 0:
        print("Connected successfully.")
    else:
        print(f"Connection failed with result code {rc}")
    client.subscribe(f"/sys/{product_key}/{device_name}/thing/event/property/post")

def on_message(client, userdata, msg):
    print(msg.topic + " " + str(msg.payload))

def on_publish(client, userdata, mid):
    print(f"Message {mid} published.")

def on_log(client, userdata, level, buf):
    print("log: ", buf)

# 创建客户端
client = mqtt.Client(client_id=client_id)
client.username_pw_set(username, password)

# 绑定回调函数
client.on_connect = on_connect
client.on_message = on_message
client.on_publish = on_publish
client.on_log = on_log

# 连接到阿里云物联网平台
print(f"Connecting to broker {broker} on port {port}")
client.connect(broker, port, 60)

# 启动MQTT客户端
client.loop_start()

# 读取图像并转换为 Base64 编码的块
def get_image_base64_chunks(image_path, chunk_size=102400):
    with open(image_path, "rb") as image_file:
        image_data = base64.b64encode(image_file.read()).decode('utf-8')
    for i in range(0, len(image_data), chunk_size):
        yield image_data[i:i + chunk_size]

# 发送 Base64 图像块的函数
def publish_image_chunk(image_chunk, chunk_index):
    topic = f"/{product_key}/{device_name}/user/update"
    payload = {
        "method": "thing.event.property.post",
        "params": {
            "image": image_chunk,
            "chunk_index": chunk_index
        }
    }
    result = client.publish(topic, json.dumps(payload))
    print(f"Publishing chunk {chunk_index}: {json.dumps(payload)} with result: {result}")

# 启动发送 Base64 图像块的循环
def publish_images_from_directory(directory):
    while True:  # 无限循环
        image_files = [f for f in os.listdir(directory) if os.path.isfile(os.path.join(directory, f)) and f.lower().endswith(('.png', '.jpg', '.jpeg'))]
        for image_file in image_files:
            image_path = os.path.join(directory, image_file)
            chunk_index = 0
            for image_chunk in get_image_base64_chunks(image_path):
                publish_image_chunk(image_chunk, chunk_index)
                chunk_index += 1
                time.sleep(1)  # 可以根据需要调整发送间隔时间
            time.sleep(2)  # 每秒发送一张图片

try:
    publish_images_from_directory(r"images direct")  # 替换为你的图像目录路径
except KeyboardInterrupt:
    print("Stopped by User")
    client.loop_stop()
    client.disconnect()

手机端查看接收的图片:
下载这个APP,安卓:IoT MQTT Panel,iOS:IoT MQTT Panel
网络问题自行解决哈
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
按照平台一键复制的数据填写

在这里插入图片描述
保存后自动连接成功了

添加一个面板
添加一个面板
在这里插入图片描述
面板设置如下:
在这里插入图片描述
在这里插入图片描述
让我们启动脚本:
在这里插入图片描述
图片以base64编码的形式发送了
在这里插入图片描述
手机端也接收到图片了

MQTTX看看收到的消息:
在这里插入图片描述
Wireshark抓包
在这里插入图片描述

树莓派接入阿里云IOT平台1(Python模拟数据上传) 树莓派接入阿里云IOT平台1(Python模拟数据上传) 主要是通过Python脚本模拟两个数据(温度和相对湿度)上传到阿里云,非常简单,只要有一个树莓派 即可,不需要其他传感器,学习完本文章,下一章将搭载一些传感器进行实战,非常有趣。 云平台开发 注册阿里云账号 使用个人淘宝账号或手机号,开通阿里云账号,并通过实名认证(可以用支付宝认证) 注册产品与设备 找到物联网平台 1选择设备管理,2选择产品,3 选择快速入门 开始体验 填写产品名和设备名 设备平台选择Linux,设备连接协议选择MQTT,开 阅读详情

相关推荐

使用 Python3 接入阿里云物联网平台(原物联网套件)

阿里云官方提供的DEMO里面没有Python接入阿里云物联网平台(原物联网套件)的例子,不便于我们在电脑端做虚拟终端的相关测试,本文介绍一种基于使用Python3、MQTT-TCP连接通信接入阿里云物联网平台(原物联网套件)。 开发语言:Python3.5 开发环境:Ubutnu16.04 IDE:PyCharm Community Edition 通信协议:MQTT、TCP 参...

S_L_zheng的博客 6711

通过 MQTT 检测对象和传输图像

在本文中,我们将学习如何使用 open-cv 和 YOLO 对象检测器每五秒捕获/保存和检测图像中的对象。然后我们将图像转换为字节数组并通过 MQTT 发布,这将在另一个远程设备上接收并保存为 JPG。我们将使用 YoloV3 算法和一个免费的 MQTT 代理YoloV3 算法:https://viso.ai/deep-learning/yolov3-overview/#...

深度学习与计算机视觉 3388

基于阿里云物联网平台设计的实时图传系统_采用MQTT协议传输图像

当前基于MQTT协议设计了一个实时图传系统,通过这个项目来演示,两个MQTT设备如何互相订阅,进行消息流转。 在阿里云服务器上创建2个设备,分为为设备A和设备B;设备A负责采集本地摄像头画面上传,设备B负责接收设备A上传的数据然后解析显示出来。在阿里云服务器上需要配置云产品流转,让设备A的数据上传后自动发送给设备B。这样就完成了视频画面数据的流转。不过因为阿里云的最大数据限制,每次最大发送10240字节的数据。

1万+

ESP32CAM的图片用MQTT也能传?物联网平台来帮你

  ESP32是乐鑫在ESP8266后推出的一款集成WiFi功能的微控制器,相较于ESP8266,ESP32拥有更强大的性能,可用于复杂应用的开发。  ESP32CAM在ESP32的基础上扩展了摄像头模组,体积极小,可广泛应用于各种物联网场合,适用于家庭智能设备、工业无线控制、无线监控、QR无线识别,无线定位系统信号以及其它物联网应用,是物联网应用的理想解决方案。  MQTT是一种基于发布/订阅模式的轻量级通讯协议,它的特点是可使用极少的代码与有限的带宽为远程连接的设备提供实时可靠的消息订阅服务,被广泛应用

isoface的博客 6398

Qt之QMqtt 发送图片数据

MQTT是一个基于客户端-服务器的消息发布/订阅传输协议;MQTT协议是轻量、简单、开放和易于实现的,这些特点使它适用范围非常广泛;在很多情况下,包括受限的环境中,如:机器与机器(M2M)通信和物联网(IoT);其在,通过卫星链路通信传感器、偶尔拨号的医疗设备、智能家居、及一些小型化设备中已广泛使用;

Ilson_的博客 1437

Python实现MQTT连接阿里云IoT平台实战教程

MQTT(Message Queuing Telemetry Transport)是一种基于发布/订阅模型的轻量级消息传输协议,专为低带宽、不稳定网络环境下的物联网设备通信而设计。其核心优势在于低功耗、低资源占用和良好的网络适应性,使其成为物联网领域的主流通信协议之一。本章将从 MQTT 的基本通信模型入手,介绍其客户端与服务端的交互方式、QoS(服务质量)等级机制、主题(Topic)的匹配与路由规则,并结合实际物联网场景,说明其典型应用方式,为后续连接阿里云 IoT Hub 提供扎实的理论支撑。

weixin_42298164的博客 978

Python对阿里云物联网MQTT设备接入端开发

文章目录前言一、pandas是什么?二、使用步骤1.引入库2.读入数据总结 前言 MQTT是用于物联网(IoT)的OASIS标准消息传递协议。本文主要记录使用阿里云物联网平台中,网关设备接入 提示:以下是本篇文章正文内容,下面案例可供参考 一、pandas是什么? 示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。 二、使用步骤 1.引入库 代码如下(示例): import numpy as np import pandas as pd import matp

m0_47958289的博客 4267

基于python的EC800物联网mqtt协议开发指南:从入门到实战(1)

从零开始学习mqtt物联网协议,基于4G模块,python集成和多态方法编写

废柴程序员-熊熊的博客 3370

ESP32cam系列教程002:ESP32cam通过MQTT协议上传图片数据到阿里云IOT平台

注意:若Arduino IDE 串口显示正常,而物联网平台中没有获取到数据,请查看 阿里云物联网平台左侧>监控运维>日志服务,若日志中出现状态 460 错误,请调整本地 Arduino IDE 中引用的。虽然图片数据已经上传到阿里云物联网平台中存储,但平台中存储的只是图片的数据,而非图片,需要将图片数据转换成图片并在其他地方展示出来。至此,从阿里云IOT平台获取图片数据并保存到本地的程序已全部完成,程序目前较为简陋,仅供参考使用。文件无需修改任何内容。自此,阿里云物联网平台的准备工作就已全部完成。

qiaoyurensheng的博客 6749

物联网APP客户端 IoT MQTT Panel

谷歌商店 http://www.snrelectronicsblog.com/iot/iot-mqtt-panel-user-guide/ 墙的问题,无法下载。特此下载,方便爱好者下载使用 安卓端软件,MQTT协议

IoT MQTT Panel 手机端MQTT调试

在做 ESP8266/ESP32 + MQTT 物联网项目时,我发现一款非常好用、界面清爽、功能强大的手机调试工具 ——IoT MQTT Panel。 它支持MQTT TCP、WebSocket、SSL,可自定义开关、文本、图表、仪表盘等多种面板,能实时订阅、发布消息,完美适配智能家居、STM32/Arduino 上云调试。配置简单、运行稳定,后台常驻也不卡顿,是嵌入式与物联网开发者的必备工具。 唯一遗憾是国内应用商店很难搜到、下载入口难找,我也是找了很久才用上。为方便大家学习调试,我把这款工具的功能亮点、使用方法、下载渠道一并整理出来,新手也能快速上手。 核心亮点 支持 MQTT / WebSocket 双协议,带 SSL 加密 开关、文本、数值、图表、仪表盘可视化面板 可后台 24 小时常驻,实时更新设备状态 支持配置导入导出,多设备同步 界面简洁,无广告,调试非常顺手 适合人群 ESP8266 / ESP32 / STM32 MQTT 调试 物联网项目本地测试 智能家居 DIY 控制面板

MQTT协议详解及阿里云物联网平台实战指南

MQTT(Message Queuing Telemetry Transport)是一种轻量级的消息传输协议,设计用于在低带宽和不稳定网络环境下进行高效的通信。MQTT采用发布/订阅模式,其中客户端可以订阅一个或多个主题(Topic),而服务器则负责将消息发布到这些主题。这种模式使得多个客户端可以同时接收到感兴趣的消息。MQTT协议非常轻量级,协议头部信息很小,有效减少了网络传输的开销和数据流量。这使得MQTT非常适合在低带宽和有限资源的设备上使用,例如物联网设备。

xuewenyu_的博客 2518

UVM对象实例化及覆盖的几种方法

UVM对象实例化的方法有多种,以下以object为例: 1)第一种:直接利用new函数进行实例化 trans t1; t1 = new("t1");//利用new函数进行实例化 2)第二种:uvm_component_registry中提供的方法type_id::create,此种方法也是最常使用的方法 trans t2; t2 = trans::type_id::create("t2",this); 3)第三种:uvm_factory中提供的方法creat_object_by_type trans t

沧月九流的博客 3377

物联网平台对接:阿里云 IoT 与设备端数据上报实战

通过本实战指南,你已学会如何将设备端对接阿里云 IoT 平台并上报数据。核心步骤包括:准备三元组、配置连接、实现上报逻辑和测试验证。阿里云 SDK 简化了开发,适用于各种 IoT 设备(如传感器、网关)。建议参考。

asdasqwqw的博客 1825

Marin说PCB之LPDDR5的布线注意事项--03

这个规则中是把每个字节中的WCK to RDQS 以及DM / DQ to WCK等长规则都加到了DM / DQ这个等长规则中去了,因为芯片手册上的设计要求中的DM / DQ这个group的等长误差是+-50MIL, WCK to RDQS的等长group的规则是62.5MIL,DM / DQ to WCK等长group的规则是相对松一些是150MIL。其实上面的等长规则还是建少了一些的,例如手册上要求的每个channel的WCK0:1,WCK2:3等长误差在+-488MIL,这个规则建议还是补上去吧。

weixin_45223454的博客 1229

光致发光(Photoluminescence, PL)入门版

关于光致发光的实际应用做出一些解释。

sinat_40546227的博客 1万+

Python模拟智能开关设备MQTT接入阿里云物联网平台 - PyCharm paho.mqtt

概要 Python 使用 paho.mqtt 库,利用阿里云物联网平台的设备证书:productKey、deviceName、deviceSecret,自动合成 userName、passWord。以MQTT通信协议接入阿里云物联网平台,并模拟智能开关设备上报开关消息。 非常适合作为MQTT物联网设备的客户端模拟。在此Demo基础上可非常方便进行二次开发。 MQTT.fx做客户端固然方便,但如果想对流程或任务进行定制、让其模拟物联网设备的功能、或者多开自动化脚本,应该没什么比Python更方便了吧。 Py

Mark_md的博客 3613

Chatbox使用指南

Chatbox使用指南

weixin_65289420的博客 2万+

MQTT系列笔记-SIM7020X NB-IoT HAT携手阿里云MQTT

序言: MQTT是基于二进制消息的发布/订阅编程模式的消息协议;由于规范很简单,非常适合需要低功耗和网络带宽有限的IoT场景,比如:智能家居、智慧城市和医疗医护;深受广大童鞋的青睐和喜爱。下面我们以SIM7020为例实现和阿里云的MQTT通信。 SIM7020X NB-IoT HAT 通过MQTT携手阿里云 硬件准备 树莓派一个 SIM7020C NB-IoT HAT一套 软件准备 sscom 阿里云物联网平台 通信步骤 1.硬件连接 把NB卡和天线接入 SIM7020C NB-IoT HAT

qq_43231904的博客 1796

2025 华为OD机试真题e卷 C语言 实现【竖直四子棋】

竖直四子棋的棋盘是竖立起来的,双方轮流选择棋盘的一列下子,棋子因重力落到棋盘底部或者其他棋子之上,当一列的棋子放满时,无法再在这列上下子。

MISAYAONE的博客 1417

AUTOSAR-SOMEIP配置总结

导入arxml之后someip信号一般以“pduSomeIp”开头或者“SomeIp”开头。以某个pdu为例,设置项“Pdu Default Partition Ref”主要是根据模块设计,配置相应的Ecuc核分区。在导入arxml之后someip信号中有三个特殊的信号,形如“SdInstance”开头的信号,设置项“Pdu Default Partition Ref”主要是根据模块设计,配置相应的Ecuc核分区。“EcuC”模块主要关注“EcucPduCollection”中的“Pdus”下面的配置。

xiandang8023的博客 4654

【物联网iot】树莓派连接阿里云iot平台定时上传温湿度信息

前提 本文操作的前提是已经在树莓派上完成了DHT11温湿度传感器的安装和数据读取。 资料可以参考 【树莓派】使用0.91寸显示屏SSD1306展示想要的内容 【树莓派】使用DHT11连接树莓派读取传感器数字并通过0.96寸屏展示 设备 树莓派3b+ DHT11 接入物联网平台 为什么是阿里云物联网平台 我选择使用阿里云的原因有以下几点 阿里云作为国内比较完善云服务商,功能比较完善 阿里云...

Code Metaverse 9651

银行监管报送系统系列介绍(二十一):银行监管报送系统总览

为保护法院案件当事人、利害关系人的合法权益,全面落实《最高人民法院、中国银行业监督管理委员会关于人民法院与银行业金融机构开展网络执行查控和联合信用惩戒工作的意见》(法【2014】266号),最高人民法院和银监会联合下发了《人民法院、银行业金融机构网络执行查控工作规范》(法【2015】321号),要求银行金融机构配合最高人民法院开展 “总对总”网络执行查控工作,并建立相应的业务系统,实现与法院的网络对接,协助法院完成对被执行人银行账户存款及其他金融资金的网络查询、冻结与扣划工作。

银行信息系统应用架构详解 2866

ESP32运行MicroPython通过MQTT上报温湿度到阿里云

目录 阿里云创建产品和设备 MQTT.fx模拟设备连接到阿里云 ESP32设备连接阿里云 阿里云创建产品和设备 1、产品与服务——》物联网平台 2、产品——》创建产品 3、创建产品模型 支持两种数据格式: ICA标准数据格式(Alink JSON):数据使用JSON格式传输,不用写脚本,可以直接在平台上显示出来 透传/自定义:需要自己写脚本解析数据 4、产品在产...

freemote的博客 9856

机器学习项目实战案例数据集

本专栏整理了《机器学习项目实战案例》,内包含了各种不同的机器学习项目,包含项目原理以及源码,每一个项目实例都附带有完整的代码+数据集。

优快云 精品推荐 3636

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

避坑指南:Python连接阿里云IoT平台MQTT服务的3个常见错误

本文详细解析了Python连接阿里云IoT平台MQTT服务的3个常见错误,包括证书路径错误、ClientID重复和KeepAlive设置不当,并提供了工业级解决方案。通过代码示例和最佳实践,帮助开发者避免常见陷阱,确保设备稳定接入云端服务。

nokia的博客 832

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

上一篇: 国密SM系列加解密图形化GUI工具推荐
下一篇: 一次成功的手机QQ聊天记录找回(OPPO R7s 安卓4.4.4)并把聊天记录导入新版本QQ的心得
kuraki peaf
博客等级 码龄7年 41粉丝 12原创
评论 8
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值