【树莓派IOT入门】模拟搭建一个气象站

这篇具有很好参考价值的文章主要介绍了【树莓派IOT入门】模拟搭建一个气象站。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1. 前言

1.1 项目需求背景

假设你要建立若干个气象站,这若干个气象站可能分布到各个地点,并使用终端设备实时查看各个气象站的温度,适度,气压等数据。

1.2 你能了解到什么

  • 树莓派如何连接外设
  • 物联网中设备的数据上行是如何处理的

1.3 需要什么前置知识 

  • 约等于中级水平的GO语言相关知识
  • 了解一点消息队列的pub/sub模式和product/consumer
  • 了解一点硬件串口相关知识

1.4 本篇文章的侧重点

本篇文章针对于没有了解过树莓派和IOT基本数据上行流程的开发人员,通过案例讲解,最终完成一套简单的标准数据上报。

对于文中涉及的golang相关知识点,不做讲解,如果对代码有不了解地方或者发现了代码中的bug,可以在github或者文章留言区留言。

2. 整体架构及说明

【树莓派IOT入门】模拟搭建一个气象站,IOT,物联网

整体来说分为以下几个模块

  1. 边缘服务器 (即树莓派 + BME280,可联网,无固定IP)
  2. 云服务器 (一个带IP的服务器,因为是演示项目,因此只部署单点)
  3. 用来展示数据的终端 (app,小程序,H5 。。。)

其中边缘服务器和云服务器会在文中多次提及

2.1 raspi边缘服务器说明

硬件配置

  • 树莓派4B 
  • 64G sd卡
  • 键盘 & 鼠标 & 显示器(有HDMI接口即可)
  • BME280 环境传感器

软件配置

  • OS: Ubuntu 
  • go1.21 

2.2 家庭使用的WIFI

  • 保证树莓派可以正常联网即可

2.3 开发环境

  • 普通的开发设备MacOS or Windows都可以 ,能够连接WIFI和搭建go1.21开发环境即可。

2.4 云端服务器说明

由于是演示项目,因此没有什么性能要求。

云端服务器硬件配置

  • cpu: 2核
  • 内存: 2G
  • 硬盘: 40G

程序运行环境及中间件配置

  • go1.21
  • emq企业版: 5.4
  • kafka: 3.6
  • redis: 7.2
  • docker & docker-compose

3. 涉及代码及代码说明

3.1 程序地址

GitHub - hawkj/my_iot: 一个基于树莓派操作设备的框架

3.2 程序目录说明

总体目录说明

【树莓派IOT入门】模拟搭建一个气象站,IOT,物联网

总体目录,大体上只有以上3块内容,后面会具体讲解代码的使用。

3.3 程序配置修改

3.3.1 云服务器环境配置变量修改

修改 /你的代码路径/my_iot/iot_server/.env 文件

【树莓派IOT入门】模拟搭建一个气象站,IOT,物联网

内网IP可以通过 ipconfig 命令查找,如果是买的云服务器,也可以直接在云服务器后台查找。

3.3.2 树莓派边缘服务器向云服务器发送上行命令地址修改

修改 /你的代码路径/my_iot/raspi/config/raspi_conf.yaml 文件

【树莓派IOT入门】模拟搭建一个气象站,IOT,物联网

其中的site-info可以理解为气象站的名称,这里可以理解为“气象站一号”,未来也可以加入经纬度来计算某一区域内的气象信息。

3.3.3 开发机向树莓派部署代码脚步修改

修改 /你的代码路径/my_iot/raspi/deploy/deploy.sh 文件

【树莓派IOT入门】模拟搭建一个气象站,IOT,物联网

  • remote_server中的IP部分指的是树莓派的连上wifi以后的局域网IP。在执行这个部署脚本时,先保证开发机和树莓派都连接到了相同的wifi,同属一个网络。
  • remote_directory指的是树莓派上放置源代码的目录。

3.3.4 开发机向云服务器部署代码脚步修改

修改 /你的代码路径/my_iot/iot_server/deploy/deploy.sh 文件

【树莓派IOT入门】模拟搭建一个气象站,IOT,物联网

  • 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 硬件接口介绍

【树莓派IOT入门】模拟搭建一个气象站,IOT,物联网

【树莓派IOT入门】模拟搭建一个气象站,IOT,物联网

这里接口定义只需简单了解下即可。如果想了解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)

【树莓派IOT入门】模拟搭建一个气象站,IOT,物联网

连接完如上图。这一步大胆按照说明去做就行。

4.2.3 在树莓派上查看BME280环境传感器的I2C地址

我们在树莓派上使用I2C命令来查看BME280的地址

【树莓派IOT入门】模拟搭建一个气象站,IOT,物联网

在命令行执行命令: i2cdetect -y 1

【树莓派IOT入门】模拟搭建一个气象站,IOT,物联网

记住这个值 0x77

修改 /你的代码路径/my_iot/common/constants/constants.go 文件,将BME280I2CAddress设置为你得到的值

【树莓派IOT入门】模拟搭建一个气象站,IOT,物联网

4.2.4 测试BME280

以下命令在开发机执行

  • cd /你本地的源代码路径/my_iot/raspi/deploy
  • sh ./deploy.sh

以下命令在树莓派(边缘服务器)上执行

  • cd /树莓派上的上传代码目录/raspi/device
  • go test -run Test_Bme280

当看到如下输出

【树莓派IOT入门】模拟搭建一个气象站,IOT,物联网

说明bme280已可以正常工作。至此,树莓派+BME280已可以正常运行。下面我们来进行云端的配置。

5. 云端服务器搭建

5.1 设备上行消息到服务器整体流程

【树莓派IOT入门】模拟搭建一个气象站,IOT,物联网

IOT设备一般的数据上行方式如上图所示。

1. 设备通过各自的topic将消息使用mqtt协议上传到server(这里使用的是emqx)

2. emqx 将数据转发到kafka队列中进行业务数据持久化

3. 业务端通过消费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企业版才有,这就是我们选择企业版的原因。

【树莓派IOT入门】模拟搭建一个气象站,IOT,物联网

做如下设置:

【树莓派IOT入门】模拟搭建一个气象站,IOT,物联网

kafka:9092 也可以改为{你的云服务器内网IP}:9092。这里可以直接使用kafka是因为所有中间件在docker-compose文件中被设置到了一个网络里。如果你没有使用docker-compose启动中间件,这里就需要改成你的内网IP。

最后,在连接器列表中看到 

【树莓派IOT入门】模拟搭建一个气象站,IOT,物联网

即配置连接器成功。

5.3.3 emq消息转发kafka规则设置

入口

【树莓派IOT入门】模拟搭建一个气象站,IOT,物联网

新增规则

SELECT

topic,payload,clientid

FROM

"device/upload/#"

【树莓派IOT入门】模拟搭建一个气象站,IOT,物联网

在此页面中,点击页面右边的添加动作按钮

【树莓派IOT入门】模拟搭建一个气象站,IOT,物联网

做如下配置

【树莓派IOT入门】模拟搭建一个气象站,IOT,物联网

【树莓派IOT入门】模拟搭建一个气象站,IOT,物联网至此,完成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的,因此我们不可以直接访问。

常用的解决方法是:

1. 边缘服务器进行反向SSH连接到某个云服务器。我们先SSH登录这个有独立IP的云服务器,然后再SSH登录到边缘服务器即可。同样道理,当反向SSH通道建立成功后,我们也可以先把代码上传到云服务器上,然后从云服务器上部署代码到边缘服务器,再登录边缘服务器启动程序。

2. 使用vpn解决

PS

至此,一个BME280环境传感器从产生数据到最后在终端展现的完整流程就结束了。

本篇文章作为入门篇只介绍了单一站点(weather_station_1),单一设备(BME280环境传感器)的数据上行流程,相较于正式项目,还有一些需要补充的内容。

由于个人精力有限,后续有精力会继续完成。

未完成的部分

  • 服务器下行消息到设备
  • 设备数据写进influxDB等时序数据库,进行数据的时段分析
  • 边缘计算相关,比如数据告警,如果设备在一段时间内数据出现异常(举例:一分钟内平均温度高于40摄氏度),进行数据上报。
  • 设备数据结构比较简单,只有一个型号,没有对应的设备初始化流程,比如生成设备ID及对应的设备属性(设备在线、离线等判断)
  • 上行/下行 链路数据追踪。
  • 等等

欢迎感兴趣的小伙伴提交pull request来补充新功能或者逻辑修改。文章来源地址https://www.toymoban.com/news/detail-805517.html

到了这里,关于【树莓派IOT入门】模拟搭建一个气象站的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 树莓派 + AWS IoT Greengrass

    https://docs.amazonaws.cn/en_us/greengrass/v2/developerguide/quick-installation.html?icmpid=docs_gg_console 准备自动化安装过程中IAM需要的必要权限 https://docs.amazonaws.cn/en_us/greengrass/v2/developerguide/provision-minimal-iam-policy.html 本地用配置好的aws cli确认当前的IAM user 来到IAM控制台中先创建一个policy. 注意替

    2024年02月11日
    浏览(42)
  • 如何用树莓派Pico针对IoT编程?

    目录 一、Raspberry Pi Pico 系列和功能 二、Raspberry Pi Pico 的替代方案 三、对 Raspberry Pi Pico 进行编程 硬件 软件 第 1 步:连接计算机 第 2 步:在 Pico 上安装 MicroPython 第 3 步:为 Thonny 设置解释器 第 4 步:编写程序 第5步:运行程序 四、小结 众所周知,Raspberry Pi(树莓

    2024年02月12日
    浏览(50)
  • ubuntu iot使用gpio库(树莓派)

    或者是:  但是 使用pip前一定要设置pip源,否则无法使用pip安装任何软件  使用这个就导入了gpio库了,然后就可以:

    2024年02月21日
    浏览(28)
  • 基于树莓派4B设计的智能家居系统(华为云IOT)

    基于树莓派的智能家居控制系统(华为云IOT) 本次设计实现了一个基于树莓派的智能家居系统,可以对家庭环境进行实时监测和控制,提高居家安全性和舒适度。该系统采用了多种传感器和模块,包括温湿度传感器、烟雾传感器、火焰传感器、光敏传感器、雨滴传感器、LED灯光

    2024年02月08日
    浏览(50)
  • AR气象博物馆模拟体验提升青少年认知

    国际气象节主要目的是唤起人们对气象工作的重视和热爱。近年来,极端天气频发,人们需要提高警惕,AR气象远程普利用ar技术特有的沉浸式的体感互动,通过模拟演练提升体验者的安全防范意识和求生技巧。 系统结合VR虚拟现实、AR增强现实技术,详细解释风、云、雾等自

    2024年02月16日
    浏览(49)
  • 气象台使用vr模拟仿真实训教学降低成本投入

    气候仿真实验室用于模拟高低温、高湿、干燥、阳光光照、降雨、降雪、覆冰、雾天与强风等多种环境适应性试验等气候和环境条件,在环境试验中,温度、湿度、光照、降雨这些常见的仿真环境都很容易实现。而比较少见的雾天、强风、降雪等环境就比较难。因此为了让学

    2024年02月07日
    浏览(59)
  • 树莓派ubuntu20.04+Docker+Nginx+Wordpress个人网站搭建全纪录(超详细,入门友好篇)

    前言: 本文基于树莓派4B平台,搭载Ubuntu Server 20.04 LTS版本服务器系统,通过将树莓派服务器连接Ipv6公网网络,利用Docker工具,部署Nginx反向代理与Wordpress网站管理系统,实现网站搭建与异地访问。同时用到了域名管理、DDNS、MySQl等工具。本文将从服务器镜像烧录开始,将网

    2024年02月02日
    浏览(45)
  • 【树莓派Linux内核开发】入门实操篇(虚拟机Ubuntu环境搭建+内核源码获取与配置+内核交叉编译+内核镜像挂载)

    1.ubuntu18.04镜像下载 打开ubuntu18.04镜像传送门,进入到主页 往下滑,找到相应镜像并下载 等待镜像下载完毕即可 2.VMware软件安装 VMware是一款 运行在windows系统上的虚拟机软件 ,可以虚拟出一台计算机硬件,方便安装各类操作系统 进入VMware官网传送门,来到主页,往下滑,选

    2024年04月29日
    浏览(57)
  • 使用树莓派Pico、DHT11和SSD1306搭建一个温度湿度计(只使用官方库,以及官方案例代码的错误之处和解决方案)

    最近想树莓派 Pico、DHT11 温湿度传感器和 SSD1306 OLED 屏幕做一个温度湿度计,树莓派官方案例也分别有这两个设备的案例,我就想做个简单的温度湿度计作为学习微控制器的开始,结果遇到了一个大坑,所以写本文记录一下整个过程。 本文最后会实现一个能在 SSD1306 OLED 屏幕上

    2024年02月11日
    浏览(42)
  • APSIM模型参数优化 批量模拟丨气象数据准备、物候发育和光合生产、物质分配与产量模拟、土壤水分平衡算法、土壤碳氮平衡模块、农田管理模块等

    随着数字农业和智慧农业的发展,基于过程的农业生产系统模型在模拟作物对气候变化的响应与适应、农田管理优化、作物品种和株型筛选、农田固碳和温室气体排放等领域扮演着越来越重要的作用。APSIM (Agricultural Production Systems sIMulator)模型是世界知名的作物生长模拟模型之

    2024年02月12日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包