由于出差多,这里的花经常过一段时间才能浇水,有些花都旱晕了,所以想做一个助手帮我远程就可以操作浇花,当然也完全可以发展为一个商用系统,拿浇花来做为一个测试平台吧,现在已经完成了,并已经运行了一个多月
总体来讲开发起来还是比较容易的,大家可以尝试,可以做很多物联网的产品
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度关闭
三极管方式 mje13003三极管(做开关用),管脚说明,面对有文字说明的一面,从左到右:B C E,1k电容(下拉电阻,保护用),杜邦线若干 接线顺序一定要正确:
B(基极)-下拉1K电阻-GPIO 40(可以任选其他控制口);
E(发射极)-GND;
C(集电极)-风扇黑线;
风扇红线-5V
工作原理:
服务端发送指令到mq
网关香橙派zero接收消费mq,并执行指令
mysql主要用到的表
c#读取sht30温湿传感例子,使用nuget 包Iot.Device.bindings即可
- using Iot.Device.Sht3x;
- using System.Device.I2c;
- /// <summary>
- /// //sht30温湿传感器
- /// </summary>
- 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; }
- /// <summary>
- /// 通讯协议 i2c/rs485
- /// </summary>
- 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 等操作