×

具有Azure数据库支持的Raspberry Pi无线家庭自动化

消耗积分:0 | 格式:zip | 大小:0.30 MB | 2022-12-23

20762

分享资料个

描述

项目级别:中级到高级

软件先决条件

  • 视窗 10
  • 视觉工作室 2015
  • 安卓工作室
  • MPLAB X IDE(带 XC8 编译器)

介绍

Windows IoT 新的 Windows IoT 为开发人员提供了一些功能,可以在更短的时间内创建强大而高效的应用程序。Windows IoT 驱动的 Raspberry Pi 是这个家庭自动化项目的关键要素。   

 
poYBAGOkEAyAW2aQAAF4CxAVQX8466.png
整体系统表示
 

Raspberry Pi 充当系统的主人。Raspberry Pi 通过 2.4GHz ISM Band RF Link 连接到许多从属设备。从设备是一个基于 PIC18F 微控制器的电路板,具有与 Raspberry Pi 建立双工无线链路所需的电路和程序。除了不同的设备 ID/地址(应该是唯一的)和设备类型编号外,每个从设备都具有相同的电路和 PCB 设计。Windows IoT 上的 C# 程序能够同时处理任意数量的从属设备。 

特征

1. 智能手机/电脑可用于控制家电。

2. Raspberry Pi 通过 ISM 频段 2.4GHz 无线链路连接到一个或多个从设备。

3. 这些从属设备允许Raspberry Pi 远程控制家用电器/电子设备。

4. 可以进行不同级别的控制。

一种。基于继电器的控制(简单的开/关功能)。

b. 基于 Triac 的控制(可以控制光强度或平均功率)

C。电机控制(基于三端双向可控硅或直流电机驱动)

d. 用户可以毫不费力地添加其他控制方法,如 PWM、反馈系统等。

5. 我已经编写了一个移动应用程序来启用基于 Internet 和本地网络(数据报套接字)的控制。

6. 树莓派添加新的从设备无需更改程序。只需点击奴隶的“添加我”按钮。Raspberry Pi 会自动将设备添加到网络(自动扫描选项也可用)。

7. 数字和模拟传感器都可以连接到从设备。由于 Raspberry Pi 从设备通信是双向 RF 链路,因此 Raspberry Pi 无需任何物理连接即可读取传感器读数。

8. 简洁的GUI C#程序将帮助用户检查连接状态、网络监控、设备控制等。

9. 存在基于定时器的控制选项。设置您想要关闭/打开特定设备的时间,Raspberry Pi 将完成剩下的工作。

10.无需太多修改即可轻松引入语音检测/语音命令。

11. 传感器读数可以写入带有时间戳的 Azure 数据库。电气设备也可以通过 Azure 云数据库进行控制。

树莓派连接 

 
pYYBAGOkEA-AaCkMAAMOZwXAQw4983.jpg
树莓派nRF模块连接
 

在这个家庭自动化系统中,Raspberry Pi 没有任何物理连接,除了 nRF SPI 通信链路 [不包括电源、以太网/WiFi 和 HDMI(可选)等基本连接]。所有的控制、监控、决策、触发和切换操作都在 Raspberry Pi 中完成。Raspberry Pi 使用双工无线链路(非 WiFi 或蓝牙标准)与从属设备通信。整个C#程序可以从本文的软件部分(GitHub)下载。

(注意:由于程序的硬件IO要求,编译到x64/x86平台可能无法正常工作。

注意:我为无线模块编写的 nRF 类没有利用该模块的真正潜力。一旦我有足够的时间,我将更新 GitHub nRF 类文件。)

 
 
 
 
pYYBAGOkEB6AC25JAASw23glHHE098.jpg
 
1 / 2
 

 

   C# 应用程序支持 3 种方式来控制家用电器甚至工业系统。

1. RPi 的 GUI。在 Raspberry Pi 中运行的漂亮 C# GUI 将允许您监视网络命令、不同的传感器读数、控制家用电器和自动控制以及其他后台任务,如 Azure DB 读/写、计时器等。

 
 
 
 
poYBAGOkECOARWDQAACyoldkKn8130.jpg
 
1 / 47 个从设备已连接,Triac 控制页面
 

设备框列出了所有可用的从属设备。您可以随时删除或添加从属设备。 

 

在 GUI 的顶部,您可以看到通过 nRF 无线链接从从属设备提取的不同传感器读数。C# 应用程序使用这些传感器读数来自动控制电气设备。

在底部,“网络日志”框显示通过 Azure 云数据库或 LAN 从移动设备/计算机接收到的所有命令以及连接设备的 IP 地址和名称。在其下方,放置了一个状态栏。它向用户显示所有必要的信息和通知。通过打开“自动更新”按钮,您将从选定的从属设备的传感器数据中获得实时更新(可以将这些传感器数据写入带有时间戳的 Azure DB 中)。此按钮还可用于检查从设备是否在 nRF24 的 RF 链接的无线范围内。“自动控制”复选框用于启用“自动控制”模式,该模式可以根据光强度传感器读数调整光强度。在 PIR 传感器的帮助下,还可以对人员存在发出警报。

 

除了控制之外,还可以通过 LAN 或 Azure 云数据库传输消息。

 
poYBAGOkEFKAHY2cAA4rxFG2fig930.jpg
Raspberry Pi GUI 的网络日志窗口
 

2.本地数据报包。

 我开发了一个简单的 Android 和 Windows 通用应用程序,用于通过本地网络 (LAN) 控制设备。

3. 基于Azure 云数据库的控制。 

上面说的同一个应用程序有一个特殊的模式通过互联网(通过 Azure 云)向 Raspberry Pi 发送命令    

 
 
 
 
poYBAGOkEFWAaFDaAACM9_MRkEE396.png
 
1 / 2Windows 通用应用程序(通过互联网的数据包支持基于云的控制)
 

(注意:我制作这些应用程序只是为了测试功能。如果你擅长 GUI 设计,你可以做得更好

注意:如果没有运行 Windows IoT 的强大 Raspberry Pi 和上述 C# 应用程序,则无法使用此应用程序。

注意:所有网络命令都以一个字符开头, '!'您可以在 Pi 的 C# 程序的 MainPage.cs 文件中看到完整的命令。)

 

 

 

从机

从设备是一块基于 PIC18F24K20 的板,带有 nRF24 无线模块。除了单独的设备类型代码和唯一的 ID/地址编号外,所有从属设备都具有相同的电路和固件程序。因此,不费吹灰之力就可以轻松制作任意数量的从属设备。

 
 
 
 
pYYBAGOkEGqATXKwAAVPZ2cmjT0997.jpg
 
1 / 4从设备尺寸
 

每个从属设备都有一个“AddMe”和“RemoveMe”按钮,用于将该从属设备注册到 Raspberry Pi 或删除从属设备。 

 

更新 (15/09/2015)

我添加了一个“自动扫描”选项。现在,连同“AddMe”按钮,您可以扫描其无线范围内的从属设备。此选项将允许您添加树莓派无线范围内的所有从属设备,而无需按从属设备的“AddMe”按钮。您所需要的只是“扫描”并等待可用设备列出。>

 

传感器可用

1.温度传感器(LM35)

2.光强度传感器(LDR)

3. PIR传感器(HC-SR601)

 
pYYBAGOkEG-ANARjAABmQfAsF14651.png
传感器数据(Raspberry Pi 的 GUI)
 

从设备原理图和 PCB 设计

您可以从本文的硬件部分下载 Eagle CAD 文件。

(我没有在互联网上找到任何好的 nRF Eagle 库。所以我自己制作了一个。您可以在本文的自定义部件和外壳部分找到这个 nRF24L01+ 库)

 
 
 
 
poYBAGOkEHuAAwmLAAGLP02aIvs258.png
 
1 / 2从设备电路图
 

从设备如何工作

Slave Devices类似于无线扩展树莓派的IO口。尽管无线通信系统有点复杂,但使用起来非常方便。永远不可能仅仅为了实施自动化系统而为整个家庭布线。所以,我决定选择无线系统。另一个附加优势是,您可以随时将家庭自动化系统扩展到任何房间,而无需添加或更新一行代码。您所需要的只是奴隶的“点击添加我”按钮。想象一下用有线系统做同样的事情!!

 
poYBAGOkEJWAZ8JhAAOFmbZJseo158.png
从设备工作
 

正如我所说,slave 设备以灵活性和更多控制扩展了 Raspberry Pi 的范围。由用户决定他/她应该分配给从属设备的控制功能。就像模板一样,我制作了 5 种不同类型的从属控件。您可以毫不费力地将它扩展到任何类型的任何数字。

public enum device_type : byte

{

      Test_Device = 0,   //Used a prototype for testing

      Triac_Device = 1,  //Triac/Solid state relay high speed switching

      Relay_Device = 2,  //Common Relay Control

      Buzzer_Device = 3, //Buzzer and Alarm Control board (Not implemented)

      Motor_Device = 4

};

上面的枚举语句显示了我的程序中可能的从属类型。

A. 三端双向可控硅装置

(注:对功率器件不熟悉的可以省略该类Slave Devices。)

Triac 是一种交流功率器件,可用于电机速度控制、光强度控制等快速开关应用。适当的触发是必要的,在设计 Triac 电路时还应考虑换向方法。从设备和 TRIAC 控制板的集成使系统更加有用和灵活。Triac 的触发有点棘手。您需要一个过零检测器来了解交流电 (LM358) 的过零点。从机内部的 PIC18F24K20 微控制器将识别过零点(来自 LM358 的方波)并根据我们从 Raspberry Pi 发送的触发延迟触发三端双向可控硅开关。

 
 
 
 
poYBAGOkEJqAARwbAAEnuh0Wzek791.png
 
1 / 4Triac 电路板 PCB 布局(镜像) [如果您使用墨粉转移法制作 PCB,则需要非镜像布局。从本文的硬件部分下载完整的 CAD 文件。]
 
 
 
pYYBAGOkEKyASpRWAAPVRdBtqoo879.jpg
Triac 板的顶视图(一些组件位于底层)。有关从设备连接的详细信息,请参阅原理图和 PCB 布局。
 

B. 中继装置

作为中继设备配置和连接从站非常容易。除了 5v 或 12v 继电器、BC547 NPN 晶体管 1k 电阻器和 1N4001/1N4004/1N4007 二极管或 ULN2003 达林顿对 IC 之外,您不需要任何额外的大型电路。我建议使用现成的简单继电器板(它非常便宜且容易获得,不会超过 2 美元[至少在我们地区])

 
 
 
 
pYYBAGOkEK6AWnsiAAA5vxqgSBU412.png
 
1 / 3简单的晶体管继电器驱动电路
 

C. 12v直流电机装置

它是中继设备的扩展。这里不是继电器电路,从设备控制两个 12v 直流电机。流行的电机驱动器 IC L293 或 L93D 可用于这些设备。

 
 
 
 
pYYBAGOkELGAQkITAABzHqOByFk242.jpg
 
1 / 2L293 电机接口(L293D 不需要任何外部二极管)[VCC1= VCC2]
 

树莓派从机无线通信

对于 Raspberry Pi 和从属设备之间的无线通信,我使用了 nRF24L01+ 模块并在 10 字节的有效载荷内创建了自定义数据包结构。

 
poYBAGOkELOAAp8rAAD9kzPg9rQ227.png
数据包结构
 

数据包类型和从设备 ID

来自从设备的“add_me_packet”将在 Raspberry Pi 的设备列表中注册该从设备 ID。Raspberry Pi 将使用这个唯一的设备 ID 与特定的从设备进行进一步的通信。 

同样,数据包通常由树莓派下发,用于控制操作。

从属设备在收到来自树莓派的更新数据包请求后,将以其传感器读数和连接设备的状态作为数据包响应给树莓派。如果您知道系统的工作原理,您可以轻松地将我的 10 字节数据包系统更改为 20 或 32(最大)数据包系统。

设备类型

我们已经看到了 Triac 器件、继电器和电机控制板。Raspberry Pi 如何知道或识别从设备将要执行的操作类型(你已经知道,每个从设备都有相同的固件和电路)。这由数据包的第 3 个字节定义。

要将从设备配置为电机设备,您需要更改给定嵌入式 C 程序的#define 语句。

//#define triac

#define relay //////need to change according to your device

#define device_id 59 //////need to change according to your device

///////////////////////////////////////////////////////////

#define device_type 4   

///Device type declaration for program

/* 

Test_Device = 0,

Triac_Device = 1,

Relay_Device = 2,

Buzzer_Device = 3,

Motor_Device = 4

 */

对于可控硅设备

#define triac   ///Uncomment this define statement 

//#define relay //////need to change according to your device

#define device_id 59 //////need to change according to your device

///////////////////////////////////////////////////////////

#define device_type 1 ///change to 1

对于继电器设备 

//#define triac

#define relay //////need to change according to your device

#define device_id 59 //////need to change according to your device

///////////////////////////////////////////////////////////

#define device_type 2

 一些沟通情况

 
pYYBAGOkELeAddzkAACuNpFE-bM579.png
可能的 AddMeScenarios
 
 
poYBAGOkELmAAMJqAAC_Kj5q_8g868.png
开/关/Triac/PWM/电机命令(尚未制造 PWM 设备)
 
 
poYBAGOkELyAJTwiAACmDLmw3uU262.png
读取传感器数据(自动更新) 此循环无限期重复,除非用户停止自动更新。
 
 
poYBAGOkEL-AWQuOAACfBoaGzOM152.png
删除我的数据包
 
 

---------------------------------------------- -

其他有用的链接和注释

  • 要启用 Internet 控制,您需要注册 Azure 帐户并使用 Azure 数据库。此链接将为您简要介绍 Azure 数据库和 Azure 移动服务Azure
  • (Pi 的 C# 仅使用第一个表条目)
     
     
     
     
    poYBAGOkEMGAN3tlAABRvOFBG_0981.png
     
    1 / 4hi world 或任何文本:Pi 将在网络日志窗口中显示此消息
     
  • 可以将不同的传感器读数插入到 Azure 数据库中。我没有在我的系统中使用它,但你只需要 2 行代码就可以做到这一点。只需将更新代码放置在 azureMonitor_tick计时器滴答事件中。

//Note free Azure Subscription has 20MB database size limit.

  • 您必须输入自己的 Azure 订阅密钥、表条目 ID 和其他信息,才能在您的计算机/树莓派/手机上运行我的程序。

     public static MobileServiceClient MobileService = new                         MobileServiceClient(

                  "https://myandroid.azure-mobile.net/",

                  "Replace this string");

     item_default.Id = "xxxxxxxxxxxxxxxxxxxxxxxxxx";

  • 如果您不擅长 PCB 制作和电路设计,我推荐 Arduino 或其他现成的电路板。对于更小的外形和低成本,请选择定制设计。

//Inside this case statement of data_received(byte[] data_byte) function

case (byte)packet_type.update_packet:

..................

  if ((bool)autocontrol.IsChecked)

{

byte[] bb = {0x00,0x00, 0x00

, 0x00 , 0x00 , 0x00 };

if (temp < 140)

bb[0] = (byte)(temp);

else

bb[0] = 140;

bb[1] = data_byte[8];          //Added code (This will enable buzzer based 

                                  //PIR reading.

bb[2] = lastitem.device3_state;

bb[3] = lastitem.device4_state;

nrf_send_data(bb, lastitem.device_address, packet_type.data_packet);

}

.......

}

最后一点

Windows IoT 家庭自动化与其他系统

 
Windows IoT 家庭自动化与其他系统
Windows IoT 家庭自动化与其他系统
 

附录 

有些人可能不熟悉微控制器 (uC) 和 uC 编程。我将解释刻录从属设备的 .hex 文件所需的一些基本内容。

1.您需要安装Microchip的MPLAB X IDE和XC8 Compiler才能重新编译程序。如果只需要烧录程序,则不需要安装 XC8 编译器。
您可以从此链接下载 MPLAB X 和 XC8 编译器MPLAB X 和 XC8

2. 编程硬件工具或简单的编程器是将程序烧录到 uC 中必不可少的。对于 Microchip 的 PIC 控制器,可以使用 PicKit3、PicKit2 或 ICD3/2。(需要连接 MCLR、VDD、GND、PGD 和 PGC 引脚)。

 
 
 
 
pYYBAGOkEMyALuA7AAOLz5BETv8224.jpg
 
1 / 2PicKit3 和从设备  
 

3. 你可以在PCB设计中看到PicKit3的header。

如何在树莓派上安装 Windows IoT

PIC18F24K20 数据表

Nrf24l01 数据表

BT136 数据表

..................................................... ..................................................... ......................

不可能在这里解释整个程序。因此,请阅读给定代码文件的注释。我在本文末尾添加了一些有用的代码片段。

随时发表您对这个项目的评论、意见和疑问。

谢谢 :)

阿南德。


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

评论(0)
发评论

下载排行榜

全部0条评论

快来发表一下你的评论吧 !