|
在本篇文章中,我们将学习如何使用HC-12无线串行通信模块,该模块能够在多个Arduino开发板之间进行远程无线通信,距离可达1.8km。其中,我列举了两个基本的例子,来解释了如何连接HC-12模块并在两个Arduinos之间进行基本通信,另外一个例子是通过使用第一个Arduino开发板上的加速计传感器,无线控制第二个Arduino开发板的步进电机的位置。
HC-12无线通信模块 首先让我们仔细看看HC-12无线串口通信模块。以下是它的一些特性: ● 其无线工作频段为433.4 MHz至473.0 MHz ● 它有100个通道,每个通道之间的步进为400 KHz ● 发射功率从-1dBm(0.79mW)到20dBm(100mW) ● 接收灵敏度从-117dBm(0.019pW)到-100dBm(10pW)。
这些值实际上取决于所选的串行和空中波特率,如下表所示。
HC-12模块有一个微控制器,实际上不需要由用户编程。对于配置模块,我们只需使用AT命令,可以从Arduino、PC或任何其他微控制器使用串口发送。要进入AT命令模式,我们只需将模块的“Set”引脚设置为低逻辑电平。
Arduino和HC-12 现在让我们将HC-12模块连接到Arduino并制作第一个示例。以下是电路原理图。模块的工作电压为3.2 V至5.5 V,为了更稳定工作,建议使用去耦电容和外部电源。但是,我使用PC USB作为本文章中所有三个示例的电源,并且没有任何问题。
我将第一个模块连接到Arduino UNO开发板,将第二个模块连接到Arduino MEGA,您也可以使用任何您想要的开发板。 以下原理图所需的组件: ● HC-12无线通信模块 ● Arduino开发板 ● 面包板和跳线
示例01 - Arduino代码 以下是第一个示例的Arduino代码,使用串口监视器(Serial Monitor)在两个模块之间进行基本通信。 - /* Arduino Long Range Wireless Communication using HC-12
- Example 01
- by Dejan Nedelkovski, www.HowToMechatronics.com
- */
- #include <SoftwareSerial.h>
- SoftwareSerial HC12(10, 11); // HC-12 TX Pin, HC-12 RX Pin
- void setup() {
- Serial.begin(9600); // Serial port to computer
- HC12.begin(9600); // Serial port to HC12
- }
- void loop() {
- while (HC12.available()) { // If HC-12 has data
- Serial.write(HC12.read()); // Send the data to Serial monitor
- }
- while (Serial.available()) { // If Serial monitor has data
- HC12.write(Serial.read()); // Send that data to HC-12
- }
- }
复制代码
这两个Arduino开发板使用相同的代码。我们可以在两台独立的计算机上连接两个Arduino开发,但我们也可以使用一台计算机。
一旦我们将第一个Arduino开发板连接到计算机,我们需要选择型号和COM端口并将代码上传到Arduino。然后我们连接第二个Arduino,我们必须再次启动Arduino IDE,以便能够选择我们的第二个Arduino连接到的另一个COM端口,然后上传相同的代码。
因此,一旦我们运行了两个Arduino IDE,我们就可以启动串口监视器并测试通信是否正常工作。我们在串口监视器中输入的任何内容都将从一个发送到另一个Arduino。
代码如何工作:所以一旦我们在串口监视器中输入内容并单击Send按钮,在第一个Arduino上,while循环中的Serial.available()函数将变为true,然后使用HC12.write()函数我们将数据从串行监视器发送到HC-12模块。该模块将数据无线传输到第二个HC-12模块,因此在第二个Arduino时,while循环中HC12.available()函数将变为true,然后使用Serial.write()函数将数据发送到串口监视器。
我们可以使用相同的代码发送AT命令和配置模块参数。我们所要做的就是将模块的“Set”引脚连接到地或Arduino的任何数字引脚,并将引脚设置为低逻辑电平。
为了测试我们是否已成功进入该模式,在串口监视器中我们可以输入“AT”,我们应该收到响应消息“OK”。总共有12个AT命令,它们用于改变波特率、通道、发射功率等各种参数。例如,如果输入“AT + B38400”,模块的波特率将设置为38400。
AT命令: 1. AT - 测试命令。
示例:向模块发送“AT”,模块返回“OK”。 2. AT + Bxxxx - 更改串口波特率。 可用波特率:1200 bps、2400 bps、4800 bps、9600 bps、19200 bps、38400 bps、57600 bps和115200 bps。默认值:9600 bps。 示例:将“AT + B38400”发送到模块,模块返回“OK + B19200”。 3. AT + Cxxxx - 更改无线通信信道,从001到100。 默认值:通道001,工作频率为433.4MHz。每个下一个通道都高出400KHz。 示例:如果我们要将模块设置为通道006,我们需要向模块发送“AT + C006”命令,模块将返回“OK + C006”。新的工作频率为435.4MHz。 |