• c# .net+香橙派orangepi 200块多打造自家 浇花助手 系统


    由于出差多,这里的花经常过一段时间才能浇水,有些花都旱晕了,所以想做一个助手帮我远程就可以操作浇花,当然也完全可以发展为一个商用系统,拿浇花来做为一个测试平台吧,现在已经完成了,并已经运行了一个多月

    总体来讲开发起来还是比较容易的,大家可以尝试,可以做很多物联网的产品

    准备材料:

    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,并执行指令

    9e2f9c25176042a1a1fc73a5c6297b86.png

    mysql主要用到的表

    7e41e2187cc041bcaf9c432f815b5270.png

    c#读取sht30温湿传感例子,使用nuget 包Iot.Device.bindings即可

    1. using Iot.Device.Sht3x;
    2. using System.Device.I2c;
    3. /// <summary>
    4. /// //sht30温湿传感器
    5. /// </summary>
    6. public static class Device_Sensor_SHT30TempAndHumService
    7. {
    8. public static void test()
    9. {
    10. //运行调用例子
    11. while (true)
    12. {
    13. Model_Sht30TempAndHumu returnValue = getTempAndHum();
    14. Thread.Sleep(1000);
    15. }
    16. }
    17. static I2cConnectionSettings set = new(0, (byte)OverWriteI2cAddress.AddrLow);
    18. static I2cDevice dev = I2cDevice.Create(set);
    19. static Sht3x sht = new Sht3x(dev);
    20. static Model_Sht30TempAndHumu returnValue = new Model_Sht30TempAndHumu();
    21. public static Model_Sht30TempAndHumu getTempAndHum()
    22. {
    23. // returnValue = new Model_Sht30TempAndHumu();
    24. // 温度
    25. returnValue.Temperature = sht.Temperature.DegreesCelsius;
    26. // 湿度
    27. returnValue.Humidity = sht.Humidity.Percent;
    28. returnValue.Agreement_type = AgreementTypeEnum.I2C;
    29. Console.WriteLine("温度:{0:N1} ℃\n湿度:{1:N1} %RH", returnValue.Temperature, returnValue.Humidity);
    30. return returnValue; ;
    31. }
    32. enum OverWriteI2cAddress : byte
    33. {
    34. AddrLow = 0x44
    35. }
    36. }
    37. public class Model_Sht30TempAndHumu
    38. {
    39. public double Temperature { get; set; }
    40. public double Humidity { get; set; }
    41. /// <summary>
    42. /// 通讯协议 i2c/rs485
    43. /// </summary>
    44. public string Agreement_type { get; set; }
    45. }

    c#操作香橙派gpio高低电平例子

    安装nuget包:IotDeviceToolHepler

    香橙派安装WiringOP;

    1. using IotDeviceToolHepler.WiringOPSharp;
    2. public class OrangePi_GpioService
    3. {
    4. //运行调用例子
    5. public void test()
    6. {
    7. Console.WriteLine("输入引脚WPI编号");
    8. //控制台中输入内容
    9. int pinNum = int.Parse(Console.ReadLine());
    10. Console.WriteLine("输入o打开,输入c关闭");
    11. string command = Console.ReadLine();
    12. if (!string.IsNullOrWhiteSpace(command))
    13. {
    14. setGpioOutputMode(command, pinNum);
    15. }
    16. }
    17. ///
    18. /// pin输入高电平或低电平
    19. ///
    20. ///
    21. ///
    22. public string setGpioOutputMode(string command, int pinNum)
    23. {
    24. try
    25. {
    26. Setup.WiringPiPiSetup();
    27. GPIO.PinMode(pinNum, WiringPi.Output);
    28. if (command == "open")
    29. { //open
    30. GPIO.DigitalWrite(pinNum, WiringPi.High);
    31. Console.WriteLine("执行开");
    32. return DeviceConstant.GpioPinOpen;
    33. }
    34. else if (command == "close")
    35. { //close
    36. GPIO.DigitalWrite(pinNum, WiringPi.Low);
    37. Console.WriteLine("执行关");
    38. return DeviceConstant.GpioPinClose;
    39. }
    40. return DeviceConstant.GpioPinError;
    41. }
    42. catch (Exception ex)
    43. {
    44. Console.WriteLine(ex);
    45. return DeviceConstant.GpioPinError;
    46. }
    47. }
    48. public string getGpioOutputMode(int pinNum)
    49. {
    50. try
    51. {
    52. Setup.WiringPiPiSetup();
    53. GPIO.PinMode(pinNum, WiringPi.Output);
    54. int value = GPIO.DigitalRead(pinNum);
    55. if (value == WiringPi.High)
    56. {
    57. Console.WriteLine("获得状态 开");
    58. return DeviceConstant.GpioPinOpen;
    59. }
    60. else if (value == WiringPi.Low)
    61. {
    62. Console.WriteLine("获得状态 关");
    63. return DeviceConstant.GpioPinClose;
    64. }
    65. return DeviceConstant.GpioPinError;
    66. }
    67. catch (Exception ex)
    68. {
    69. Console.WriteLine(ex);
    70. return DeviceConstant.GpioPinError;
    71. }
    72. }
    73. }
    74. public class DeviceConstant
    75. {
    76. ///
    77. ///
    78. ///
    79. public static string GpioPinOpen = "open";
    80. ///
    81. ///
    82. ///
    83. public static string GpioPinClose = "close";
    84. ///
    85. ///
    86. ///
    87. public static string GpioPinError = "error";
    88. }

    电箱装好

    95c7d5b22a0545408d66fa6e4c32a2cb.jpg

     H5界面效果

    f5596f4c94534ddf8d5357ba482e8871.png

    水管

    209d5cb8633a464a958b44b085725c70.jpg

    电箱安装

    0631d8bf85eb44a789138b21c05cc00e.jpg

    f2848b1f4e6348bd96a13a88604666bb.png

    b12b8d20334d44ca8cba3794ea6f766e.jpg

    5bb5213bc7be4b43b774a570cd628c1e.jpg

    操作香橙派的引脚,需要用官方的wiringOP库,他是c++的,我这里已经将她融合到.net里面,成为一个工具类库,源代码已开源

    代码在:https://gitee.com/yihong-lin/IotDeviceForCsharp.git

    代码里面包括 香橙派 c# 引用 wiringOP 类库, 操作其它设备的代码 ,包括串口,i2c  等操作

  • 相关阅读:
    火遍国内外IT技术圈,豆瓣 9.7!这本技术书籍直接封神了
    医依通小程序项目总结
    在uni-app中,input组件的auto-focus和focus属性用于控制输入框的自动聚焦行为,它们之间的区别
    《鸿蒙生态应用开发白皮书》读后感
    FoFa 查询工具(fofax)
    idea中maven无法导包问题
    excel vba 制作 kml 文档时,如何写入有引号的字符串
    virtio代码分析(一)-qemu部分
    本地模拟启动分布式遇到问题
    html5——前端笔记
  • 原文地址:https://blog.csdn.net/qq_16005627/article/details/128020188