littlebot
Published on 2025-04-12 / 4 Visits
0

【源码】基于 Docker 的 Pelion 虚拟设备管理演示系统

项目简介

本项目是仅基于软件的 Pelion 虚拟演示设备,能连接到 Pelion 设备管理服务,无需设备硬件即可使用和演示该服务。在新冠疫情出行受限期间,有助于进行高级设备管理主题讨论;在无法面对面实体演示时,屏幕共享演示也很实用。

项目的主要特性和功能

  1. 模拟设备连接:无需实体硬件,在计算机上模拟连接设备,方便讲解物联网设备管理。
  2. 实时交互:可实时查看和写入设备管理服务中的设备数据。
  3. 多场景适用:适用于视频通话屏幕共享演示、实时试验 Pelion 设备管理门户、测试 FOTA 固件更新工具、实现和测试 Pelion 设备管理 REST API 等。
  4. 设备类型可定制:能模拟振动传感器、计数器设备、温度传感器等不同类型设备。
  5. 固件更新功能:支持全量固件更新和增量更新。
  6. 工厂预配模式:支持工厂预配模式,适用于生产部署。

安装使用步骤

假设用户已经下载了本项目的源码文件。

运行虚拟演示

  1. Pelion 设备管理门户 生成一个访问密钥。
  2. 启动 pelion/virtual-demo 容器镜像,将 CLOUD_SDK_API_KEY 替换为你的密钥: docker run --name pelion-demo -p 8888:8888 -e CLOUD_SDK_API_KEY=<YOUR_PELION_API_KEY> pelion/virtual-demo 可使用 CLOUD_URL 环境变量指定默认的 Pelion 云地址,省略则使用默认生产地址 api.us-east-1.mbedcloud.com
  3. 在浏览器中访问 http://localhost:8888 访问虚拟设备的用户界面。
  4. 记录设备 ID,在 Pelion 设备管理门户的设备列表中找到该设备,实时浏览资源并查看虚拟设备的数据更新。

指定设备类型和传感器更新间隔

若模拟计数器设备或温度传感器,在 docker run 指令中分别追加 -e SENSOR=counter-e SENSOR=temperature。默认传感器更新间隔为 5 秒,可通过追加 -e INTERVAL=secs 参数覆盖设置。 docker run --name pelion-demo -p 8888:8888 -e CLOUD_SDK_API_KEY=<YOUR_PELION_API_KEY> -e SENSOR=counter pelion/virtual-demo

执行固件更新

全量固件更新

  1. 复制虚拟演示仓库到本地。
  2. 切换到固件源代码所在目录: cd mbed-cloud-client-example
  3. 从运行中的 Docker 容器复制凭证源和 manifest-tool 配置到本地文件夹: docker cp pelion-demo:/build/mbed-cloud-client-example/mbed_cloud_dev_credentials.c . && docker cp pelion-demo:/build/mbed-cloud-client-example/update_default_resources.c . && docker cp pelion-demo:/build/mbed-cloud-client-example/.manifest-dev-tool .
  4. 修改虚拟演示发送的模拟值,使其乘以 1000: vi source/blinky.cpp 导航到第 308 行,添加以下行: _sensed_count = _sensed_count * 1000; 保存并退出。
  5. 启动一个新的虚拟演示开发容器,用于构建新的固件: docker run -it --name pelion-demo-dev \ -v $(pwd)/source/blinky.cpp:/build/mbed-cloud-client-example/source/blinky.cpp \ -v $(pwd)/mbed_cloud_dev_credentials.c:/build/mbed-cloud-client-example/mbed_cloud_dev_credentials.c \ -v $(pwd)/update_default_resources.c:/build/mbed-cloud-client-example/update_default_resources.c \ -v $(pwd)/.manifest-dev-tool/:/build/mbed-cloud-client-example/.manifest-dev-tool/ \ pelion/virtual-demo bash
  6. 切换到固件源代码目录: cd /build/mbed-cloud-client-example/
  7. 调用 make 工具构建新的固件镜像: make -C __x86_x64_NativeLinux_mbedtls/ mbedCloudClientExample.elf
  8. 生成固件清单,上传到门户并启动更新活动: manifest-dev-tool update -p __x86_x64_NativeLinux_mbedtls/Debug/mbedCloudClientExample.elf -w -n -v 0.2.0

增量更新

  1. 切换到主程序源目录: cd /build/mbed-cloud-client-example/
  2. 假设已按上述建议修改 source/blinky.cpp,生成新的固件: make -C __x86_x64_NativeLinux_mbedtls/ mbedCloudClientExample.elf
  3. 将新固件复制到 firmwares/ 目录: cp __x86_x64_NativeLinux_mbedtls/Debug/mbedCloudClientExample.elf firmwares/new_fw.bin
  4. 使用 manifest-delta-tool 生成增量固件: manifest-delta-tool -c firmwares/current_fw.bin -n firmwares/new_fw.bin -o firmwares/delta-patch.bin
  5. 启动更新活动: manifest-dev-tool update -p firmwares/delta-patch.bin -w -n -v 0.2.0

工厂预配模式

  1. 以工厂预配模式启动虚拟演示: docker run -it --name pelion-demo -p 8888:8888 -e FACTORY_PROVISIONING_MODE=ON pelion/virtual-demo
  2. 假设已在本地机器上正确设置了工厂配置实用程序,将配置注入虚拟演示: python3 ft_demo/sources/ft_demo.py inject --endpoint-name=virtual-demo --serial-number=10101 tcp --ip=localhost --port=8888
  3. 以生产模式启动虚拟演示: docker start -a pelion-demo

开发模式

  1. 从 Pelion 设备管理门户生成一个访问密钥。
  2. 从复制的仓库根目录启动 pelion/virtual-demo 容器镜像,将 CLOUD_SDK_API_KEY 替换为你的密钥,若要构建计数器设备而非默认的振动传感器,可添加 -e SENSOR=counterdocker run -it --name pelion-demo-dev -p 8888:8888 -v $(pwd):/build -e CLOUD_SDK_API_KEY=<YOUR_API_KEY> pelion/virtual-demo bash
  3. 在容器内创建构建环境: cd ../mbed-cloud-client-example mbed config root . mbed deploy python3 pal-platform/pal-platform.py deploy --target=x86_x64_NativeLinux_mbedtls generate cd __x86_x64_NativeLinux_mbedtls cmake -G "Unix Makefiles" -DCMAKE_BUILD_TYPE=Debug -DCMAKE_TOOLCHAIN_FILE=./../pal-platform/Toolchain/GCC/GCC.cmake \ -DEXTERNAL_DEFINE_FILE=./../define_linux_update.txt -DFOTA_ENABLE=ON -DFOTA_TRACE=ON cd ../../sim-webapp
  4. 构建代码更改: rm -f firstrun && python3 sim-webapp.py
  5. 当系统编译完更改并运行演示时,在主机机器的 localhost:8888 URL 上找到运行的 Web 应用程序。

下载地址

点击下载 【提取码: 4003】【解压密码: www.makuang.net】