概述
前一段时间经常能听到一些xx公寓装修甲醛超标,xxx公司程序员因xx公寓甲醛超标得绝症新闻,最近又刚买了一些家具,甚是担心这个问题。虽然相对于绿萝、活性炭、光触媒,经常通风才是除甲醛的王道。但是心里还是想知道室内的甲醛指数是多少,这样才能敦促自己多多通风。
在t宝上搜了一圈,发现一个甲醛检测仪便宜的9.9,贵的上万,都号称绝对准确。看来水真的很深,于是乎跑到张大妈上又搜索了一番。发现有些up主,用了一些看起来像DIY的一些检测仪,透明亚克力外壳加一些甲醛、TVOC、温湿度等传感器。然后又去了一趟t宝,发现真有这东西。参数大概如下:▼
看评论这个传感器号称能和专业的甲醛检测仪媲美,顿时心里被种了草????。(实际上本文的目的也就是图个大概趋势,并不需要特别精确,种草需谨慎)。从这个图里我们能看到测量准确不准确其实和传感器关联很大,其他传感器我暂时不需要,以后再说。然后又搜了下有单独卖DART-WZS传感器的,差不多60-70块,得,买了吧。
1. 准备
- 树莓派一块:系统随意,我用的是Raspbian。
- 显示器:脑子不好使,记不住那么多的命令,感觉还是桌面操作效率高。命令行大神请略过。
- 导线:若干
2.配置和连接
树莓派要开启GPIO支持,具体就是下图:
因为达特的这款传感器用的是串口通信,所以要把Serial Console设置为Disable,这个是通过串口控制树莓派用的。
达特WZ-S传感器的引脚如图▼
树莓派的引脚如图▼
用到的就是框里的那四个引脚。至于BCM编码和writingPi编码的有啥区别,参考之前的那篇文章吧。【.NET Core】如何点亮树莓派Raspberry Pi 3b+上的一盏小灯
连线
- 传感器的5V引脚接到树莓派的5V引脚上
- 传感器的GND引脚接到树莓派的GND引脚上
- 传感器的RXD引脚接到树莓派的TXD引脚上
- 传感器的TXD引脚接到树莓派的RXD引脚上
串口配置
树莓派有两个串口,一个是硬件串口(/dev/ttyAMA0),一个是mini串口(/dev/ttyS0)。硬件串口由硬件实现,有单独的波特率时钟源,性能高、可靠,mini串口没有波特率时钟源而是由CPU内核时钟提供,波特率会受到内核时钟的影响,若内核降低主频,那么波特率就变了,连接就会出现问题。在树莓派3中因为硬件串口被分配给了蓝牙,GPIO上的是mini串口。问了稳定起见,这里要把这两个串口给调换一下。
- 查看串口映射关系
输入ls -l /dev
serial0就是GPIO串口,此时对应的是ttyS0。 - 修改配置文件
执行命令sudo nano /boot/config.txt
, 在最后一行添加dtoverlay=pi3-miniuart-bt
按ctrl+x保存并退出。然后重启树莓派。 - 再次确认,能看到串口已经调换了。▼
3. 编码测试
- 由于要使用GPIO和串口,所以项目里要使用
System.Device.Gpio
和System.IO.Ports
这两个包,直接nuget管理器里搜索安装即可。 - 串口的选择
就像Windows系统里的com1、com2一样,可以使用SerialPort
类来获取可用的串口由哪些:
Console.WriteLine("Available Ports:");
var portNams = SerialPort.GetPortNames();
for (int i = 0; i < portNams.Length; i++)
{
Console.WriteLine($"{i}. {portNams[i]}");
}
Console.WriteLine("Enter COM port number:");
int.TryParse(Console.ReadLine(), out int index);
using (SerialPort sp = new SerialPort("/dev/ttyAMA0"))//我这里写死了,只用/dev/ttyAMA0
{
}
-
传感器通讯协议
从DART WZ-S传感器手册里能看到,波特率是9600,数据位8位,停止位1位。通讯又分为主动上传和问答,默认是每秒主动上传一次。▼
这里我们不需要它的主动上传,所以要切换为问答式。手册里给出了具体的切换命令、读取甲醛浓度命令和数据的返回格式。手册参考:达特WZ-S型甲醛检测模组 -
最后代码
class Program
{
/// <summary>
/// 参考:
/// 1. https://github.com/dotnet/iot/blob/master/samples/README.md
/// 2. https://blog.csdn.net/weixin_43046653/article/details/84998083
/// 3. WZ-S参数pdf文档
/// 4. https://github.com/Microsoft/Windows-iotcore-samples
/// </summary>
/// <param name="args"></param>
static void Main(string[] args)
{
Console.WriteLine("Available Ports:");
var portNams = SerialPort.GetPortNames();
for(int i = 0; i < portNams.Length; i++)
{
Console.WriteLine($ "{i}. {portNams[i]}");
}
Console.WriteLine("Enter COM port number:");
int.TryParse(Console.ReadLine(), out int index);
using(SerialPort sp = new SerialPort("/dev/ttyAMA0"))
{
sp.BaudRate = 9600; //波特率
sp.DataBits = 8; //数据位
sp.StopBits = StopBits.One; //停止位
sp.ReadTimeout = 2000;
sp.WriteTimeout = 2000;
sp.Open();
Console.WriteLine($ "Is Open:{sp.IsOpen}");
Console.WriteLine("Type '!q' or Ctrl-C to exit...");
bool finished = false;
Console.CancelKeyPress += (a, b) =>
{
finished = true;
sp.Close();
};#
region 切换到问答模式
try
{
byte[] modebyte = new byte[9]
{
0xFF, 0x01, 0x78, 0x41, 0x00, 0x00, 0x00, 0x00, 0x46
};
sp.Write(modebyte, 0, modebyte.Length);
}
catch(TimeoutException)
{
Console.ForegroundColor = ConsoleColor.Red;
Console.WriteLine("超时:设置为问答模式失败");
Console.ForegroundColor = ConsoleColor.White;
}
int i = 0;
byte[] byteRead = new byte[9]
{
0xFF, 0x01, 0x86, 0x00, 0x00, 0x00, 0x00, 0x00, 0x79
};#
endregion
while(!finished)
{
if(finished) break;
Thread.Sleep(1000);
sp.Write(byteRead, 0, byteRead.Length); //发送读命令
byte[] datas = new byte[9];
sp.Read(datas, 0, 9);
var ugLevel = datas[2] * 256 + datas[3] / 1000.0;
var ppbLevel = datas[6] * 256 + datas[7];
Console.Write($ "{++i}.甲醛浓度(美标):");
if(ugLevel > 0.05)
{
Console.ForegroundColor = ConsoleColor.Red;
}
else
{
Console.ForegroundColor = ConsoleColor.Green;
}
Console.Write($ "{ugLevel:N3}mg/m³,{ppbLevel}ppb.n");
Console.ForegroundColor = ConsoleColor.White;
}
Console.WriteLine("Done");
}
}
}
4. 图赏
(甲醛浓度国标是0.08mg/m³,美标是0.05mg/m³)
后记:其实这个传感器,你吹口气他也会提示超标。。。。。????
参考
- DART WZ-S传感器技术手册
- 通信方式梳理:GPIO,I2C,SPI,UART,USART,USB的区别
- dotnet/iot
- 树莓派3b+串口配置
最后
以上就是狂野发夹为你收集整理的【.NET IoT】把达特甲醛传感器DART WZ-S接到树莓派RaspberryPi 3 b+上的全部内容,希望文章能够帮你解决【.NET IoT】把达特甲醛传感器DART WZ-S接到树莓派RaspberryPi 3 b+上所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复