由于出差多,这里的花经常过一段时间才能浇水,有些花都旱晕了,所以想做一个助手帮我远程就可以操作浇花,当然也完全可以发展为一个商用系统,拿浇花来做为一个测试平台吧,现在已经完成了,并已经运行了一个多月
总体来讲开发起来还是比较容易的,大家可以尝试,可以做很多物联网的产品
1、5V香橙派 zero2 一个
2、5V高低电平继电器一个
3、S8550 PNP三极管一个
4、12V转5V 转换器一个
5、5v 3cm散热风扇一个
6、sht30温湿计一个
7、12V水管专用的电磁阀门一个
8、浇花水管和喷头一套
9、电箱+底板一个
10、杜邦线几条
11、220V转12V电源一个
以上材料都是在某宝上采购的,成本一共200-250吧
另外我在腾讯云买了一个linux的轻应用服务器 作为我的云端服务器,由于我是首次购买:66元就可以一年
vs2022 .net 6+rabbitmq+mysql
先讲解一下各个元件的作用:
香橙派 zero2 :用作网关主机,安装官网提供的ubuntu系统,部署.net应用程序,用来控制高低电平继电器打开 水管专用的电磁阀门 和 散风扇开关
高低电平继电器:有控制断开和接通电路的用作,实现开关,接12V水管专用的电磁阀门火线
S8550 PNP三极管:用于控制开关散热风扇
也有控制断开和接通电路的用作,实现开关, 跟继电器类似,区别是 他没有负载电隔离功能,继电器有隔离,电流很大时发热量很大,多用于小电流场合,继电器用于大电流场合,所以两个我都体验用一下
220V转12V电源:接家用电,接12V水管专用的电磁阀门零线
12V转5V 转换器:接5V香橙派 zero2,5V高低电平继电器,5v 3cm散热风扇一个
5v 3cm散热风扇:装在机箱,如果 6、sht30温湿计检测的 温度高于35℃,风扇启动散热,33度关闭
工作原理:
服务端发送指令到mq
网关香橙派zero接收消费mq,并执行指令
mysql主要用到的表
c#读取sht30温湿传感例子,使用nuget 包Iot.Device.bindings即可
using Iot.Device.Sht3x;
using System.Device.I2c;
///
/// //sht30温湿传感器
///
public static class Device_Sensor_SHT30TempAndHumService
{
public static void test()
{
//运行调用例子
while (true)
{
Model_Sht30TempAndHumu returnValue = getTempAndHum();
Thread.Sleep(1000);
}
}
static I2cConnectionSettings set = new(0, (byte)OverWriteI2cAddress.AddrLow);
static I2cDevice dev = I2cDevice.Create(set);
static Sht3x sht = new Sht3x(dev);
static Model_Sht30TempAndHumu returnValue = new Model_Sht30TempAndHumu();
public static Model_Sht30TempAndHumu getTempAndHum()
{
// returnValue = new Model_Sht30TempAndHumu();
// 温度
returnValue.Temperature = sht.Temperature.DegreesCelsius;
// 湿度
returnValue.Humidity = sht.Humidity.Percent;
returnValue.Agreement_type = AgreementTypeEnum.I2C;
Console.WriteLine("温度:{0:N1} ℃\n湿度:{1:N1} %RH", returnValue.Temperature, returnValue.Humidity);
return returnValue; ;
}
enum OverWriteI2cAddress : byte
{
AddrLow = 0x44
}
}
public class Model_Sht30TempAndHumu
{
public double Temperature { get; set; }
public double Humidity { get; set; }
///
/// 通讯协议 i2c/rs485
///
public string Agreement_type { get; set; }
}
c#操作香橙派gpio高低电平例子
安装nuget包:IotDeviceToolHepler
香橙派安装WiringOP;
using IotDeviceToolHepler.WiringOPSharp;
public class OrangePi_GpioService
{
//运行调用例子
public void test()
{
Console.WriteLine("输入引脚WPI编号");
//控制台中输入内容
int pinNum = int.Parse(Console.ReadLine());
Console.WriteLine("输入o打开,输入c关闭");
string command = Console.ReadLine();
if (!string.IsNullOrWhiteSpace(command))
{
setGpioOutputMode(command, pinNum);
}
}
///
/// pin输入高电平或低电平
///
///
///
public string setGpioOutputMode(string command, int pinNum)
{
try
{
Setup.WiringPiPiSetup();
GPIO.PinMode(pinNum, WiringPi.Output);
if (command == "open")
{ //open
GPIO.DigitalWrite(pinNum, WiringPi.High);
Console.WriteLine("执行开");
return DeviceConstant.GpioPinOpen;
}
else if (command == "close")
{ //close
GPIO.DigitalWrite(pinNum, WiringPi.Low);
Console.WriteLine("执行关");
return DeviceConstant.GpioPinClose;
}
return DeviceConstant.GpioPinError;
}
catch (Exception ex)
{
Console.WriteLine(ex);
return DeviceConstant.GpioPinError;
}
}
public string getGpioOutputMode(int pinNum)
{
try
{
Setup.WiringPiPiSetup();
GPIO.PinMode(pinNum, WiringPi.Output);
int value = GPIO.DigitalRead(pinNum);
if (value == WiringPi.High)
{
Console.WriteLine("获得状态 开");
return DeviceConstant.GpioPinOpen;
}
else if (value == WiringPi.Low)
{
Console.WriteLine("获得状态 关");
return DeviceConstant.GpioPinClose;
}
return DeviceConstant.GpioPinError;
}
catch (Exception ex)
{
Console.WriteLine(ex);
return DeviceConstant.GpioPinError;
}
}
}
public class DeviceConstant
{
///
/// 开
///
public static string GpioPinOpen = "open";
///
/// 关
///
public static string GpioPinClose = "close";
///
/// 关
///
public static string GpioPinError = "error";
}
电箱装好
H5界面效果
水管
电箱安装
操作香橙派的引脚,需要用官方的wiringOP库,他是c++的,我这里已经将她融合到.net里面,成为一个工具类库,源代码已开源
代码在:https://gitee.com/yihong-lin/IotDeviceForCsharp.git
代码里面包括 香橙派 c# 引用 wiringOP 类库, 操作其它设备的代码 ,包括串口,i2c 等操作