树莓派上云-天工物接入

  前几天在朋友介绍下试用了阿里云的物联网平台,阿里云IOT平台使用MQTT协议通信,并且可以使用Web可视化开发将设备信息反映在网页上进行控制,绑定域名后就能随时随地进行查看和控制,但是阿里云IOT是收费的,虽然不是很贵,但是对于一个在读学生来说,非必要情况,还是不想花钱。。。有兴趣的可以去看看,附上朋友博客 树莓派上云 。我记的百度云的天工物接入平台是有免费政策的,每个月一百万条消息以内是免费的。而且也提供有Web物可视功能,就去研究了一下,写一个简单记录供大家参考,本人系在读学生,而且跨专业搞电子,可能有些地方有误,请大家指点。
  附上用IOT物可视制作的页面
在这里插入图片描述

创建设备

开通服务

第一次使用百度云的朋友需要先注册账户并开通物接入服务。
1,登录百度智能云官网,点击右上角的“管理控制台”,快速进入控制台界面。
2,选择“产品服务 > 物联网服务 > 物接入IoT Hub”,进入服务页面。
3,点击“立即开通”,开通服务并同意按需计费,可进入“项目列表”,创建物接入项目。 附上计费规则

  这里的消息条数是指,云平台每发送或接收一条消息,对我们学习使用来说,基本足够用了。

创建项目

  进入物接入IoT Hub后在左侧项目列表中,创建一个新项目,输入项目名称,项目类型选择设备型。
这里注意百度云IOT只能创建一个设备型项目,而且创建后项目名称不可修改,项目不可删除。
在这里插入图片描述
在这里插入图片描述

设备接入

创建物模型

  项目创建好后回到项目列表,点击项目名称进入物模型创建界面,这里的物模型对应的是现实中的设备属性模型,点击创建物模型,输入名称,并添加需要的属性,这里的属性是设备与云服务器上传的属性。设置好属性后保存。
在这里插入图片描述

创建物影子

  在左侧选择物影子,进入物影子创建界面。物影子,指的是在物模型中创建的这一类设备存在云服务器上的反映,一个物模型可以对应多个物影子,设备的属性反映在物影子的属性上。点击新建物影子,输入设备名称,物模型选择刚创建的那个物模型。存储配置是收费项目,根据需要选择,这里存储配置是存储历史数据。 物影子创建成功后会弹出链接信息,尽量将其下载下来,如果找不到了,需要在物影子设备->物详情->连接配置中重新生成,此时密钥会发成变化,造成之前的密钥失效。创建完毕后的物影子就像这样,我新建的raspi4B,那个aliyun影子是我放在云服务器中的,正在运行,所以显示在线。

  使用MQTT客户端测试,这里我使用的是MQTT.fx客户端。切记不可使用MQTT1.7.0版本,这个版本有bug。

测试连接

  打开mqtt客户端,添加一个配置。

profile name配置文件名称,可随意填写
Broker Address创建项目后返回的hostname,在刚才保存的文件中有。
Broker Port使用1883端口连接是非加密连接,使用1884端口需要配置SSL/TLS
Client ID设备端需要填写物影子名称,其他客户端随意,使用物影子ID连接能够使物影子显示在线状态。

  在User Credential中填写刚保存的用户名和密钥。 如果使用了1884端口,需要配置SSL/TLS安全认证,勾选 Enable SSL/TLS,选择CA signed server certificate认证。
在这里插入图片描述
配置完毕后点击apply应用。回到软件,选择刚才的配置,点击连接,此时右边的灯会亮绿灯,代表连接成功。
在这里插入图片描述
回到物影子界面,可见物影子上显示已连接
在这里插入图片描述
在物影子交互界面复制订阅主题,粘贴入MQTT客户端进行订阅,订阅成功后,在MQTT客户端显示一条订阅记录。
在这里插入图片描述
在这里插入图片描述
在物影子详情中点编辑,修改当前值及期望值,然后确定。随后可在mqtt客户端收到一条订阅消息。
在这里插入图片描述
在这里插入图片描述

  在物影子交互中复制第一条订阅主题,粘贴入MQTT客户端的Publish窗口,在物影子详情中复制 原始数据 中的这一段,粘贴入MQTT客户端。
在这里插入图片描述


  修改期望值为10和11,发布值为20和21,点击Publish发布,然后可见物影子属性界面随之发生改变。(需要手动刷新)

在这里插入图片描述

  至此,MQTT协议的订阅与发布功能测试完成。

树莓派上云

环境搭建

  树莓派上需要安装有Python3以上的版本,需要用到paho-mqtt模块。
  paho-mqtt模块要使用1.2版,我之前用的1.5版发现无法连接到服务器。换成1.2版就可以。
在这里插入图片描述

代码编写

  程序中主要使用paho-mqtt模块,这个模块的说明请参考Python paho-mqtt 模块使用和API分析代码的主要部分已进行注释。 代码开头加载python3解释器,然后将文件权限设为755,就可以直接进行执行。
在这里插入图片描述

  运行后,树莓派就开始上报消息,同时如果修改物模型中的期望值,树莓派就可以收到期望值的改变,同时如果发布之出现改变,树莓派同样能收到改变的那一部分参数,这样就可以使用别的客户端控制设备。设备实例使用物影子ID连接,其他客户端使用别的ID连接。
在这里插入图片描述
在这里插入图片描述
  代码只需要修改主机地址,用户名,密钥,还有ClientID即可。根据需要在 Sensor_dict字典和read_serverInfo()函数段添加相应字段即可。

#!/usr/bin/env python3

import paho.mqtt.client as mqtt
import json,time,os

host = '**************'   #主机地址
port = 1883                     #服务器端口
username = '********'  #用户名
passwd = '!!!!!!!!!!!!!!!'     #密钥
clientid = '!!!!'            #客户端实例名称

topic = '$baidu/iot/shadow/raspi4B/update'  #消息发布主题
desired = '$baidu/iot/shadow/raspi4B/delta' #订阅期望值发生变化的消息
reported = '$baidu/iot/shadow/raspi4B/update/documents'  #订阅属性发生变化的消息

connect_flog = 0            #连接成功标志
Json_buf = {'reported':0}   #上报消息用的字典
Sensor_dict= {'MemUsage':0,'freeMem':0,'usedMem':0,'loadavg_1':0,'loadavg_5':0,'loadavg_15':0,'cputemp':0}  #采集的属性值

def on_connect(client, userdata, rc):   #连接回调函数
    global connect_flog
    if rc == 0:
        print('连接成功')
        connect_flog = 1
        client.subscribe(desired,0)  #订阅消息
        client.subscribe(reported,0) #订阅消息
    else :
        connect_flog = 0
        print("连接失败,错误代码:%d"%rc)

def on_disconnect(client, userdata, rc):  #断开连接回调
    print("断开连接,代码%d"%rc)

def on_message(client, userdata, msg):  #收到订阅的消息是回调此函数
    buf = str(msg.payload,'utf-8')    #将收到的消息转为JSON字符串格式
    buf = json.loads(buf)            #将JSON字符串转为字典

    if msg.topic == desired :       #判断消息类型
        print ("领导发话了:",end='')
        print (buf['desired']) 

    elif msg.topic == reported :    #判断消息类型
        print("情况有变: vsrsion = %s "%buf['profileVersion'],end='')
        print ("当前值:%s  "%buf['current'],end='')
        print ("上次值:%s"%buf['previous'])

def on_subscribe(client, userdata, mid, granted_qos):    #订阅成功回调
    print("订阅成功")

def mqtt_connect():         #开始连接MQTT服务器
    client.connect(host,port,60) 
    client.loop_start()

def MemInfo():      #获取系统内存信息
    out_dict = {'FreeMem':0,'UsedMem':0,'MemUsage':0}  #内存信息缓冲区
    f = os.popen('free')      
    buf = f.readline()
    buf = f.readline()
    buf = buf.strip().split()
    out_dict['FreeMem'] = int(buf[6])
    out_dict['UsedMem'] = int(buf[2])
    out_dict['MemUsage'] = int(buf[2]) * 100 / int(buf[1])
    return out_dict

def LoadAvg():          #获取系统负载信息
    out_dict = {'loadavg_1':0,'loadavg_5':0,'loadavg_15':0}
    f = os.popen('uptime')
    buf = f.readline()
    buf = buf.replace(',','')
    buf = buf.strip().split()
    var = buf.index('average:')

    out_dict['loadavg_1'] = float(buf[var + 1])*100 / 2
    out_dict['loadavg_5'] = float(buf[var + 2])*100 / 2
    out_dict['loadavg_15'] = float(buf[var + 3])*100 / 2

    return out_dict

def CpuTemp():   #获取CPU温度
    f = open('/sys/class/thermal/thermal_zone0/temp')
    buf = f.read()
    f.close()
    buf = int(buf)
    buf = buf / 1000
    return buf

def read_serverInfo(): #读取服务器信息
    meminfo = MemInfo()
    loadavg = LoadAvg()
    Sensor_dict['MemUsage'] = round(meminfo['MemUsage'],2)   #将读取到的信息写入字典
    Sensor_dict['freeMem'] = round(meminfo['FreeMem'] / 1024,2)
    Sensor_dict['usedMem'] = round(meminfo['UsedMem'] / 1024,2)
    Sensor_dict['loadavg_1'] = round(loadavg['loadavg_1'],2)
    Sensor_dict['loadavg_5'] = round(loadavg['loadavg_5'],2)
    Sensor_dict['loadavg_15'] = round(loadavg['loadavg_15'],2)
    Sensor_dict['cputemp'] = round(CpuTemp(),2)

def Send_data():    #向MQTT服务器发布消息
    read_serverInfo()    #读取信息
    Json_buf['reported'] = Sensor_dict  #封装消息包
    Rx_buf = str(json.dumps(Json_buf))  #将字典转为JSON字符串
    client.publish(topic,Rx_buf)    #上报消息

client = mqtt.Client(clientid)   #使用构造函数构造一个客户端实例

client.on_connect = on_connect  #连接回调函数
client.on_disconnect = on_disconnect
client.on_message = on_message
client.on_subscribe = on_subscribe  

client.username_pw_set(username, passwd) #设置用户及密钥

if __name__ == '__main__':
   print("开始连接MQTT服务器")
   mqtt_connect()
   while True:
       if connect_flog == 1 :  
           Send_data()   
           time.sleep(10)  #每隔10s上报一次消息

总结

  小白第一次发帖,请多指教,有问题请留言,后面还有一些关于百度物可视的操作没有法,半夜了,后面有机会在发吧,简单说,就是在天工物联网总览打开物可视,先创建一个工作区,然后在工作区创建一个仪表盘,进入仪表盘,拖放控件,然后一些控件可以绑定数据,但是需要先在画布顶部进入数据栏创建数据表,数据表类型选择物影子。

  简单总结一下,比较百度云和阿里云,两相比较 百度IOT 优点:有一部分免费政策,但是幅度不大,每月免费100万条消息。服务器的属性设置很自由,而且精度很高,可以达到小数点后七八位。 缺点:不能储存历史记录,当然这是对免费政策来说的,如果想储存数据需要购买他的时序数据库。Web项目不如阿里云的,虽然阿里云的也有一定的缺陷,比如不能显示字符串参数。

<think>好的,我现在需要帮助用户解决树莓派RPI-RP2连接Wi-Fi和以太网的问题。首先,我需要确认用户提到的RPI-RP2是什么。树莓派型号中有4B、5等,但RPI-RP2可能是指某个特定版本或者用户可能的拼写错误。不过,根据常见的树莓派型号,可能是指树莓派Pico或者某个变种,但根据用户后续提到的连接网络,更可能是指树莓派4B或5,因为Pico本身没有网络功能。或者,RPI-RP2可能是指树莓派的某种配置模式,比如USB Gadget模式,这时候可能需要参考引用中的rpi-gadget-image-creator项目。不过用户的问题核心是连接Wi-Fi和以太网,所以应该以常规方法为主。 接下来,我需要回忆树莓派连接网络的常规方法。对于有线以太网,通常直接插入网线即可自动获取IP,但可能需要配置静态IP。对于Wi-Fi,通常需要在系统中配置,比如通过raspi-config工具,或者修改wpa_supplicant配置文件。 用户提供的引用中有提到在VMware安装树莓派系统,可能需要配置网络设置。引用3提到的rpi-gadget-image-creator项目可能与通过USB模拟网络设备有关,可能适用于无有线网络的情况,比如通过USB共享网络。但用户的问题可能更偏向于常规连接,所以需要分步骤说明两种方式。 首先,处理Wi-Fi连接。树莓派系统通常是Raspberry Pi OS,基于Debian,所以配置Wi-Fi可以通过图形界面或命令行。对于无头安装(没有显示器),用户需要预先配置wpa_supplicant.conf文件。插入SD卡后,在boot分区创建该文件,写入SSID和密码。这样启动后会自动连接。 其次,以太网连接相对简单,插入网线即可。但用户可能需要设置静态IP,这时候需要修改dhcpcd.conf文件或者interfaces文件,具体取决于系统版本。 另外,用户提到RPI-RP2,可能需要确认是否需要特殊驱动或配置。例如,某些树莓派型号的无线模块可能需要额外固件,但通常Raspberry Pi OS已经包含。如果有问题,可能需要更新系统或安装firmware包。 还需要考虑用户是否在VMware中安装树莓派系统,这时候网络配置可能与理机不同。例如,VMware的网络桥接或NAT设置会影响树莓派虚拟机的网络连接方式。但用户的问题可能更偏向树莓派的连接,所以应区分情况。 在回答中需要引用提供的参考资料。引用1是关于VMware安装树莓派的教程,可能涉及网络配置部分。引用2是树莓派官方文档,应该包含网络配置的详细说明。引用3提到的USB Gadget可能用于通过USB共享网络,适合没有有线或无线的情况,可以作为补充方法。 可能的问题点:用户是否在初次启动时需要配置网络?是否需要启用SSH?引用中提到开启SSH远程连接,这可能需要在SD卡中创建ssh文件,或者在系统中启用。但用户的问题主要是连接网络,所以SSH可能作为后续步骤。 总结步骤: 1. 连接以太网:插入网线,检查接口状态,配置静态IP(可选)。 2. 连接Wi-Fi:通过命令行工具或预配置文件。 3. 验证连接:使用ping命令检查网络连通性。 4. 其他方法:如USB Gadget模式(引用3中的项目)。 需要确保LaTeX格式正确,例如命令中的代码部分使用行内公式$...$,但根据用户示例,代码块应使用代码围栏,而独立公式用$$...$$,但网络配置中可能较少涉及数学公式,所以可能不需要使用。 最后,生成相关问题,比如静态IP配置、SSH连接、网络故障排查等。</think>### 树莓派 RPI-RP2 连接 Wi-Fi 和以太网教程 #### 一、以太网连接(有线网络) 1. **理连接** 将网线插入树莓派的以太网接口,路由器会自动分配 IP 地址(DHCP 模式)。 2. **验证连接** 在终端输入以下命令查看 IP 地址: ```bash $ ifconfig eth0 ``` 若显示类似 `inet 192.168.x.x` 的字段,则连接成功。 3. **静态 IP 配置(可选)** 修改 `/etc/dhcpcd.conf` 文件: ```bash $ sudo nano /etc/dhcpcd.conf ``` 添加以下内容(根据实际网络环境修改): ```bash interface eth0 static ip_address=192.168.1.100/24 static routers=192.168.1.1 static domain_name_servers=8.8.8.8 ``` 重启网络服务: ```bash $ sudo service dhcpcd restart ``` #### 二、Wi-Fi 连接(无线网络) 1. **图形界面配置** 在树莓派桌面右上角点击网络图标,选择 Wi-Fi 名称并输入密码即可[^2]。 2. **命令行配置(适用于无显示器场景)** - **预配置法**: 在 SD 卡的 `boot` 分区创建 `wpa_supplicant.conf` 文件,写入以下内容: ```bash ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev update_config=1 country=CN network={ ssid="你的Wi-Fi名称" psk="你的Wi-Fi密码" key_mgmt=WPA-PSK } ``` 插入 SD 卡启动后,树莓派会自动连接 Wi-Fi。 - **运行时配置**: 使用 `raspi-config` 工具: ```bash $ sudo raspi-config ``` 选择 **System Options > Wireless LAN**,输入 SSID 和密码。 3. **验证连接** ```bash $ ping www.baidu.com ``` 若返回数据包,则连接成功。 #### 三、通过 USB Gadget 连接网络(特殊场景) 若树莓派无网络接口,可通过 **USB 模拟以太网设备** 共享主机网络: 1. 使用工具 `rpi-gadget-image-creator` 生成支持 USB Gadget 的系统镜像[^3]。 2. 通过 USB 线连接树莓派与电脑,配置网络共享(详见项目文档)。 --- ###
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

萌新程序猿~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值