距离上一篇《张高兴的 .NET Core IoT 入门指南》系列博客的发布已经过去 2 年的时间了,2 年的时间 .NET 版本发生了巨大的变化,.NET Core 也已不复存在,因此本系列博客更名为 《张高兴的 .NET IoT 入门指南》,我也重新审阅了之前的内容进行了相应的更改以保证内容的时效性。

和单片机不同,使用 Linux 开发板、现成的传感器套件以及合适的后端技术几乎可以做成任何东西。为了更好的整合前面章节介绍的内容,本文将制作一个简单的气象站(也许叫环境信息收集装置更合适),至于为何选择制作一个气象站,因为难度不高制作不复杂,并且温湿度传感器花费较低的价格即可获得,可以以低廉的价格换取一个 cool stuff。本文将使用 .NET 6 编写一个控制台应用程序,通过本文你可以学到:

  1. I2C I2cDevice 类的使用;
  2. 摄像头设备 VideoDevice 类的使用;
  3. Iot.Device.Bindings NuGet 包的使用;
  4. 时序数据库 TimescaleDB 的简单使用;
  5. Quartz 定时任务的使用;
  6. 在控制台应用中进行依赖注入;
  7. 使用 Docker 拉取镜像、部署应用。
  • 硬件需求
  • 电路
  • 准备工作
    • 配置 TimescaleDB 数据库
    • 安装摄像头的依赖库
  • 编写代码
    • 项目结构
    • 项目依赖
    • 数据库上下文与实体类
    • 配置文件
    • 初始化与依赖注入配置
    • 配置定时任务
  • 部署应用
    • 发布到文件
    • 构建 Docker 镜像
  • 后续工作

硬件需求

名称 描述 数量
Orange Pi Zero Linux 开发板 x1
BME280 提供温度、湿度以及气压数据 x1
USB 摄像头 提供环境图像 x1
杜邦线 传感器与开发板的连接线 若干

电路

传感器 接口 开发板接口
BME280 SDA TWI0_SDA (Pin 3)
SCL TWI0_SCK (Pin 5)
VCC 5V (Pin 4)
GND GND (Pin 6)
USB 摄像头 USB USB

准备工作

配置 TimescaleDB 数据库

TimescaleDB 是一款基于 PostgreSQL 插件的时序数据库。考虑到收集的环境数据是按时间进行索引,并且数据基本上都是插入,没有更新的需求,因此选用了时序数据库作为数据存储。TimescaleDB 是 PostgreSQL 的一款插件,可以通过先安装 PostgreSQL 之后再安装插件的形式部署 TimescaleDB,这里直接使用 TimescaleDB 的 Docker 镜像进行部署。

  1. 拉取 TimescaleDB 镜像:
docker pull timescale/timescaledb:latest-pg14
  1. 创建卷,用于持久化数据库数据:
docker volume create tsdb_data
  1. 运行镜像,端口映射为 54321,密码配置为弱密码 @Passw0rd
docker run -d --name timescaledb -p 54321:5432 --restart=always -e POSTGRES_PASSWORD='@Passw0rd' -e TZ='Asia/Shanghai' -e ALLOW_IP_RANGE=0.0.0.0/0 -v tsdb_data:/var/lib/postgresql timescale/timescaledb:latest-pg14
  1. 使用熟悉的数据库管理工具(如 Navicat)创建数据库 WeatherMetrics
CREATE DATABASE "WeatherMetrics"
WITH OWNER = postgres ENCODING = 'UTF8';CREATE TABLE metrics (time TIMESTAMP WITHOUT TIME ZONE NOT NULL DEFAULT 'now()',device_id VARCHAR(50) NULL,weather_type VARCHAR(50) NULL,temperature DECIMAL(5, 2) NULL,humidity DECIMAL(5, 2) NULL,pressure DECIMAL(8, 2) NULL,image_base64 TEXT NULL
);SELECT create_hypertable('metrics', 'time');

time 表示采集数据的时间,device_id 记录采集设备的 id,weather_type 记录从心知天气获取的天气名,temperature 记录传感器获取的温度,humidity 记录传感器获取的湿度,pressure 记录传感器获取的气压,image_base64 记录摄像头采集的图像。

张高兴的 .NET IoT 入门指南:(七)制作一个气象站相关推荐

  1. 张高兴的 .NET IoT 入门指南:(八)基于 GPS 的 NTP 时间同步服务器

    时间究竟是什么?这既可以是一个哲学问题,也可以是一个物理问题.古人对太阳进行观测,利用太阳的投影发明了日晷,定义了最初的时间.随着科技的发展,天文观测的精度也越来越准确,人们发现地球的自转并不是完全一 ...

  2. 张高兴的 .NET Core IoT 入门指南:(四)使用 SPI 进行通信

    张高兴的 .NET Core IoT 入门指南:(四)使用 SPI 进行通信 什么是 SPI 和上一篇文章的 I2C 总线一样,SPI(Serial Peripheral Interface,串行外设 ...

  3. 制作一个状态栏中跑马灯效果_图标设计指南(3)——制作一个图标集所需全部信息(中)...

    本文翻译自图标设计专家Justas Galaburda写的图标设计指南.本文主要介绍制作一个图标集所需全部信息(中).翻看同系列文章,直接到文章最底部. 制作一个图标集所需全部信息 上次我们介绍了我将 ...

  4. 基于.NET 制作一个气象站 IoT 应用

    点击"阅读原文"获得最佳阅读体验. 和单片机不同,使用 Linux 开发板.现成的传感器套件以及合适的后端技术几乎可以做成任何东西.为了更好的整合前面章节介绍的内容,本文将制作一个 ...

  5. 张高兴的 .NET Core IoT 入门指南:(五)PWM 信号输出

    什么是 PWM 在解释 PWM 之前首先来了解一下电路中信号的概念,其中包括模拟信号和数字信号.模拟信号是一种连续的信号,与连续函数类似,在图形上表现为一条不间断的连续曲线.数字信号为只能取有限个数值 ...

  6. 张高兴的 .NET Core IoT 入门指南:(五)串口通信入门

    在开始之前,首先要说明的是串口通信所用到的 SerialPort 类并不包含在 System.Device.Gpio NuGet 包中,而是在 System.IO.Ports NuGet 包中.之所以 ...

  7. 张高兴的.NET Core IoT 入门指南:(四)使用 SPI 进行通信

    什么是 SPI 和上一篇文章的 I2C 总线一样,SPI(Serial Peripheral Interface,串行外设接口)也是设备与设备间通信方式的一种.SPI 是一种全双工(数据可以两个方向同 ...

  8. 张高兴的 .NET Core IoT 入门指南:环境配置、Blink、部署

    如何在 Raspberry Pi 的 Raspbian 上构建使用 GPIO 引脚的 IoT 程序?你可能会回答使用 C++ 或 Python 去访问 Raspberry Pi 的引脚.现在,C# 程 ...

  9. 张高兴的 .NET Core IoT 入门指南:(二)GPIO 的使用

    什么是 GPIO GPIO 是 General Purpose Input Output 的缩写,即"通用输入输出". Raspberry Pi 有两行 GPIO 引脚, Rasp ...

最新文章

  1. python music21将音符转为mid格式音乐
  2. 嵌入式linux内核oops,Linux编程时遇到Oops提示该如何排查?
  3. mysql循环insert多条数据
  4. linux 4412跑程序,荣品4412的板子上跑纯linux
  5. 计算机英语一级考试试题,全国计算机一级考试试题及答案
  6. chrome自动提交文件_收集文档及提交名单统计
  7. 大厂年薪100万的可视化工程师,水平到底有多牛,看完我服了
  8. Python 全国考级二级
  9. FCN用卷积层代替FC层原因(转)
  10. [置顶] 从零开始学C++之STL(二):实现简单容器模板类Vec(vector capacity 增长问题、allocator 内存分配器)...
  11. 新工作 Day15 周四
  12. 已知两点坐标,求两点连成的直线中的某一点坐标
  13. Java中的锁 | JDK6 关于锁的优化
  14. c语言 无锁编程,无锁编程与有锁编程的效率总结、无锁队列的实现(c语言)
  15. 淳于髡(约前386年—前310年)
  16. python 访问局域网电脑,使用python连接到局域网数据库
  17. 进了小公司的应届程序员如何翻身进入大公司?
  18. 4、Gantt 任务节点部分
  19. [redis]Redis ZSet排序问题(排名实现按时间顺序排布)
  20. springboot新手项目从零开始搭建,涉及excel数据导出和邮箱发送(上)

热门文章

  1. HttpClient的使用
  2. SDK build Tools revision is too low
  3. sdk缺失”目标进程已退出,但未引发 CoreCLR 启动事件。请确保将目标进程配置为使用 .NET Core。如果目标进程未运行 .NET Core,则发生这种情况并不意外。 程序“[16780]
  4. 火箭工作室c++小游戏——虫虫大乱斗
  5. linux 辅助ip地址到文本,技术|如何在 Ubuntu 系统中添加一个辅助 IP 地址
  6. svm 用来人脸识别_基于SVM的人脸识别
  7. 融合之路——厚积薄发
  8. Dark Mobile Bank之移动银行应用仿冒攻击威胁分析报告
  9. web前端应届生面试注意事项
  10. (附AK代码)第四届“传智杯”全国大学生IT技能大赛(决赛B组)题解