- remote_server中的IP部分指的是云服务器的公网IP
- remote_directory指的是云服务器上放置源代码的目录。
4. 树莓派边缘服务器搭建
4.1 树莓派系统安装
- 在树莓官网下载 Raspberry Pi Imager 。地址为:Raspberry Pi OS – Raspberry Pi
- 我在树莓派上安装的系统是ubuntu带桌面,其他linux的系统也是可以的。
- 树莓派安装OS的文章网上有很多,如果遇到问题可自行查找。
4.2 连接BME280到树莓派并进行调试
4.2.1 BME280 硬件接口介绍
这里接口定义只需简单了解下即可。如果想了解BME280详细资料,可自行上网查找。
4.2.2 BME280 硬件连接到树莓派
连接 BME280 到树莓派的 GPIO 引脚。BME280 通常使用 I2C 连接,包括电源(VCC)、地(GND)、数据线 SDA(Serial Data)、时钟线 SCL(Serial Clock)。确保正确连接。
- VCC -> 3.3V(树莓派上的 3.3V 电源)
- GND -> GND(树莓派上的地)
- SDA -> SDA(树莓派上的 GPIO2)
- SCL -> SCL(树莓派上的 GPIO3)
连接完如上图。这一步大胆按照说明去做就行。
4.2.3 在树莓派上查看BME280环境传感器的I2C地址
我们在树莓派上使用I2C命令来查看BME280的地址
在命令行执行命令: i2cdetect -y 1
记住这个值 0x77
修改 /你的代码路径/my_iot/common/constants/constants.go 文件,将BME280I2CAddress设置为你得到的值
4.2.4 测试BME280
以下命令在开发机执行
- cd /你本地的源代码路径/my_iot/raspi/deploy
- sh ./deploy.sh
以下命令在树莓派(边缘服务器)上执行
- cd /树莓派上的上传代码目录/raspi/device
- go test -run Test_Bme280
当看到如下输出
说明bme280已可以正常工作。至此,树莓派+BME280已可以正常运行。下面我们来进行云端的配置。
5. 云端服务器搭建
5.1 设备上行消息到服务器整体流程
IOT设备一般的数据上行方式如上图所示。
-
设备通过各自的topic将消息使用mqtt协议上传到server(这里使用的是emqx)
-
emqx 将数据转发到kafka队列中进行业务数据持久化
-
业务端通过消费kafka队列中的消息,完成具体的业务逻辑。
5.2 中间件启动
以下操作在本地开发机上执行
- cd /你本地的源代码路径/my_iot/iot_server/deploy
- sh ./deploy.sh
以下操作在云服务器上执行
- cd /你的云服务器上传目录/iot_server
- sudo docker-compose up -d
在启动前请检查 iot_server 目录下的 .env 文件中的 INTERNAL_IP 内网地址。要确保这个内网地址设置正确。
5.2.1 kafka 创建用于接受emq消息的topic
在云服务器端执行
sudo docker exec -it kafka /opt/bitnami/kafka/bin/kafka-topics.sh --create --topic device-upload --bootstrap-server localhost:9092 --partitions 1 --replication-factor 1
5.3 emqx 消息转发设置
5.3.1 log in emqx
登录 EMQX Dashboard 替换你自己的云服务器IP。
首次登录用户名/密码:admin/public
5.3.2 设置连接器
kafka连接器只有emq企业版才有,这就是我们选择企业版的原因。
做如下设置:
kafka:9092 也可以改为{你的云服务器内网IP}:9092。这里可以直接使用kafka是因为所有中间件在docker-compose文件中被设置到了一个网络里。如果你没有使用docker-compose启动中间件,这里就需要改成你的内网IP。
最后,在连接器列表中看到
即配置连接器成功。
5.3.3 emq消息转发kafka规则设置
入口
新增规则
SELECT
topic,payload,clientid
FROM
“device/upload/#”
在此页面中,点击页面右边的添加动作按钮
做如下配置
至此,完成emq消息转发给kafka进行持久化配置。
6. 启动项目
6.1 启动SME280传感器
进入树莓派服务器
先换一下源,执行: go env -w GOPROXY=https://goproxy.cn,direct
- cd 你的树莓派代码目录/raspi/deploy
- sh ./build_job.sh
- sh ./start_job.sh bme280 {}
JOB进程启动后,可以根据启动后指定的log目录,进去看一下是否有错误信息。
6.2 启动云服务端消费程序
登录你云服务器
先换一下源,执行: go env -w GOPROXY=https://goproxy.cn,direct
- cd /你的云服务器代码上传目录/iot_server/deploy
- sh ./build_job.sh
- sh ./start_job.sh device_upload_consumer {}
JOB进程启动后,可以根据启动后指定的log目录,进去看一下是否有错误信息。
6.3 启动应用服务接口
登录你云服务器
- cd /你的云服务器代码上传目录/iot_server/deploy
- sh ./service_start web_socket
6.4 查看站点气象数据
Api 请求地址:
curl --location ‘http://{你的云服务器域名或公网IP:}8901/api/device/info?device_code=bme280’ \
–header ‘Site-Id: weather_station_1’
请求参数说明
- Site-Id (header 传递) 气象站点ID
- device_code (query 传递) 设备编码
请求header中传递的Site-Id,来自于项目配置文件中的site-info。如果多站点配置,只需要修改不通站点的site-info就可以。
返回数据:
// 返回数据中的 timestamp , 为消息在边缘服务器最初被生产出来的时间。
{
"code": 0,
"data": "{\"humidity\":19.166992,\"pressure\":101042.2,\"temperature\":24.76,\"timestamp\":1704887724}"
}
6.5 远程访问边缘服务器
由于边缘服务器是没有独立IP的,因此我们不可以直接访问。
常用的解决方法是:
-
边缘服务器进行反向SSH连接到某个云服务器。我们先SSH登录这个有独立IP的云服务器,然后再SSH登录到边缘服务器即可。同样道理,当反向SSH通道建立成功后,我们也可以先把代码上传到云服务器上,然后从云服务器上部署代码到边缘服务器,再登录边缘服务器启动程序。
-
使用vpn解决
PS
至此,一个BME280环境传感器从产生数据到最后在终端展现的完整流程就结束了。
本篇文章作为入门篇只介绍了单一站点(weather_station_1),单一设备(BME280环境传感器)的数据上行流程,相较于正式项目,还有一些需要补充的内容。
由于个人精力有限,后续有精力会继续完成。
未完成的部分
最后
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Java工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。
因此收集整理了一份《2024年嵌入式&物联网开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上嵌入式&物联网开发知识点,真正体系化!
如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新!!
[外链图片转存中…(img-La7GPTpF-1715628346818)]
[外链图片转存中…(img-zAEDXtM5-1715628346819)]
[外链图片转存中…(img-Anpl4Vvn-1715628346819)]
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上嵌入式&物联网开发知识点,真正体系化!
如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新!!