Arduino和HC-12远程无线通信模块

在这个Arduino教程中,我们将学习如何使用能够在多个Arduino板之间进行长距离无线通信的HC-12无线串行通信模块,距离高达1.8km。您可以观看以下视频或阅读下面的书面教程以获取更多详细信息。

概述


对于本教程,我制作了两个基本示例,解释了如何连接HC-12模块并在两个Arduinos之间进行基本通信,以及在第一Arduino的加速度计传感器之间使用加速度计传感器在第二个arduino中使用加速度计传感器在第二个arduino。

HC-12无线串行通信模块

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无线模块接收灵敏度

HC-12模块具有一个微控制器,实际上不必由用户编程。要配置模块,我们只需在命令中使用,可以使用串行端口从Arduino,PC或任何其他微控制器发送。为了进入AT命令模式,我们只需将模块的“设置”引脚设置为低逻辑电平。

Arduino和HC-12


现在让我们将HC-12模块连接到Arduino并制作第一个示例。这是电路原理图。模块的工作电压在3.2 V ~ 5.5 V之间,为了更稳定的工作,建议使用去耦电容和外部电源。然而,在本教程中,我使用PC USB作为所有三个例子的电源,它没有任何问题。

Arduino和HC-12电路原理图

我将第一个模块连接到Arduino UNO,第二个模块连接到Arduino MEGA,但当然,你可以使用任何你想要的主板。

您可以从下面的链接获取此Arduino教程所需的组件:

yaboAG娱乐城披露:这些是附属链接。作为一名亚马逊助理,我从合格的购买中获得收入。

例01 - Arduino代码


这是Arduino代码的第一个例子,两个模块之间的基本通信使用串行监视器。

/* Arduino远程无线通信使用HC-12示例01 by Dejan Nedelkovski, www.HowToMechatronics.com */ #include  SoftwareSerial HC12(10, 11);// HC-12 TX Pin, HC-12 RX Pin void setup() {Serial.begin(9600);//串口到计算机HC12.begin(9600);//串口到HC12} void loop() {while (HC12.available()){//如果HC-12有数据Serial.write(HC12.read());//发送数据到串行监视器}while (Serial.available()){//如果串行监视器有数据HC12.write(Serial.read());//将数据发送给HC-12}}

两个Arduinos使用相同的代码。我们可以在两台单独的电脑上连接两个Arduinos但我们也可以使用一台电脑。

HC-12到PC

在这种情况下,一旦我们将第一个Arduino连接到计算机,我们需要选择模型和COM端口并将代码上传到Arduino。然后我们连接第二个arduino,我们必须再次启动Arduino IDE才能选择我们的第二个Arduino的其他COM端口,然后上传相同的代码。

因此,一旦我们有两个Arduino ide运行,我们可以启动串行监视器,并测试通信是否工作正常。我们在串行显示器上输入的任何东西都会从一个Arduino发送到另一个Arduino。

HC-12 Arduino串行通信示例

代码如何工作:因此,一旦我们在串行监视器中键入某些内容并单击“发送”按钮,在第一个Arduino,While循环与Serial.Available()函数将变为真实并使用HC12.Write()函数,我们将从中发送数据串行监视器到HC-12模块。该模块将无线地将数据传输到第二个HC-12模块,因此在与HC12.Available()函数的第二个arduino循环中将变为真实并且使用串行IWRITE()函数将数据发送到串行监视器。

我们可以使用相同的代码发送AT命令和配置模块参数。我们所要做的就是将模块的Set引脚连接到Ground或Arduino的任何数字引脚,并将该引脚设置为低逻辑电平。

HC-12 AT命令设置引脚

要测试我们是否已成功输入模式,我们可以在串行监视器中输入“AT”,我们应该获得响应消息“确定”。在命令中总共有12个,它们用于改变像波特率,信道,发射功率等的各种参数,例如,如果我们键入“AT + B38400”,将设置模块的波特率38400。

在命令:

1. AT - 测试命令。

示例:将“在”到模块中,模块返回“确定”。

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.在+ CXXXX - 更改无线通信信道,从001到100。

默认值:通道001,工作频率为433.4MHz。每个下一个频道都有400kHz。

例如:如果我们想将模块设置为通道006,我们需要向模块发送“AT+C006”命令,模块将返回“OK+C006”。新的工作频率将是435.4兆赫。

例02.


现在让我们移动第二个例子。在这里,我们将使用两个按钮来选择不同的通信通道,并有一种存储传入数据的不同方法。

示例02  -  HC-12通道选择

注意:两个HC-12模块的“Set”引脚都连接两个Arduino的引脚6,第一个Arduino的两个按钮连接到引脚4和3。

第一个Arduino代码:

/ / #include  #define setPin 6 #define button1 4 #define button2 3 SoftwareSerial HC12(10,11);亚搏手机版官方下载// HC-12 TX引脚,HC-12 RX引脚字节incomingByte;String readBuffer = "";int button1State = 0;int button1Pressed = 0;int button2State = 0;int button2Pressed = 0;void setup() {Serial.begin(9600);//打开计算机HC12.begin(9600)的串口;//打开串口到HC12 pinMode(setPin, OUTPUT); pinMode(button1, INPUT); pinMode(button2, INPUT); digitalWrite(setPin, HIGH); // HC-12 normal, transparent mode } void loop() { // ==== Storing the incoming data into a String variable while (HC12.available()) { // If HC-12 has data incomingByte = HC12.read(); // Store each icoming byte from HC-12 readBuffer += char(incomingByte); // Add each byte to ReadBuffer string variable } delay(100); // ==== Sending data from one HC-12 to another via the Serial Monitor while (Serial.available()) { HC12.write(Serial.read()); } // ==== If button 1 is pressed, set the channel 01 button1State = digitalRead(button1); if (button1State == HIGH & button1Pressed == LOW) { button1Pressed = HIGH; delay(20); } if (button1Pressed == HIGH) { HC12.print("AT+C001"); // Send the AT Command to the other module delay(100); //Set AT Command Mode digitalWrite(setPin, LOW); // Set HC-12 into AT Command mode delay(100); // Wait for the HC-12 to enter AT Command mode HC12.print("AT+C001"); // Send AT Command to HC-12 delay(200); while (HC12.available()) { // If HC-12 has data (the AT Command response) Serial.write(HC12.read()); // Send the data to Serial monitor } Serial.println("Channel successfully changed"); digitalWrite(setPin, HIGH); // Exit AT Command mode button1Pressed = LOW; } // ==== If button 2 is pressed, set the channel 02 button2State = digitalRead(button2); if (button2State == HIGH & button2Pressed == LOW) { button2Pressed = HIGH; delay(100); } if (button2Pressed == HIGH) { HC12.print("AT+C002"); // Send the AT Command to the other module delay(100); //Set AT Command Mode digitalWrite(setPin, LOW); // Set HC-12 into AT Command mode delay(100); // Wait for the HC-12 to enter AT Command mode HC12.print("AT+C002"); // Send AT Command to HC-12 delay(200); while (HC12.available()) { // If HC-12 has data (the AT Command response) Serial.write(HC12.read()); // Send the data to Serial monitor } Serial.println("Channel successfully changed"); digitalWrite(setPin, HIGH); button2Pressed = LOW; } checkATCommand(); readBuffer = ""; // Clear readBuffer } // ==== Custom function - Check whether we have received an AT Command via the Serial Monitor void checkATCommand () { if (readBuffer.startsWith("AT")) { // Check whether the String starts with "AT" digitalWrite(setPin, LOW); // Set HC-12 into AT Command mode delay(200); // Wait for the HC-12 to enter AT Command mode HC12.print(readBuffer); // Send AT Command to HC-12 delay(200); while (HC12.available()) { // If HC-12 has data (the AT Command response) Serial.write(HC12.read()); // Send the data to Serial monitor } digitalWrite(setPin, HIGH); // Exit AT Command mode } }

第二个Arduino代码:

/ * Arduino Long ression使用按钮Nedelkovski使用按钮的频道使用HC-12示例02,www.www.kuaixg.com * / #include  #define setpin 6软亚搏手机版官方下载件级HC12(10,11);// HC-12 TX引脚,HC-12 RX引脚字节incomingByte;String readBuffer = "";void setup() {Serial.begin(9600);//打开计算机HC12.begin(9600)的串口;//打开串口到HC12 pinMode(setPin, OUTPUT);digitalWrite (setPin、高);// HC-12普通模式} void循环(){// ====在(hc12.available()){//,如果hc-12具有数据incomingbyte = hc12.read();readBuffer += char(incomingByte); //从HC-12存储icoming字节//将每个字节添加到ReadBuffer字符串变量}delay(100); // ==== Sending data from one HC-12 to another via the Serial Monitor while (Serial.available()) { HC12.write(Serial.read()); } // === If button 1 is pressed, set channel 01 if (readBuffer == "AT+C001") { digitalWrite(setPin, LOW); // Set HC-12 into AT Command mode delay(100); // Wait for the HC-12 to enter AT Command mode HC12.print(readBuffer); // Send AT Command to HC-12 ("AT+C001") delay(200); while (HC12.available()) { // If HC-12 has data (the AT Command response) Serial.write(HC12.read()); // Send the data to Serial monitor } Serial.println("Channel successfully changed"); digitalWrite(setPin, HIGH); // Exit AT Command mode readBuffer = ""; } // === If button 2 is pressed, set channel 02 if (readBuffer == "AT+C002") { digitalWrite(setPin, LOW); // Set HC-12 into AT Command mode delay(100); // Wait for the HC-12 to enter AT Command mode HC12.print(readBuffer); // Send AT Command to HC-12 delay(200); while (HC12.available()) { // If HC-12 has data (the AT Command response) Serial.write(HC12.read()); // Send the data to Serial monitor } Serial.println("Channel successfully changed"); digitalWrite(setPin, HIGH); // Exit AT Command mode readBuffer = ""; } checkATCommand(); readBuffer = ""; // Clear readBuffer } // ==== Custom function - Check whether we have received an AT Command via the Serial Monitor void checkATCommand () { if (readBuffer.startsWith("AT")) { // Check whether the String starts with "AT" digitalWrite(setPin, LOW); // Set HC-12 into AT Command mode delay(100); // Wait for the HC-12 to enter AT Command mode HC12.print(readBuffer); // Send AT Command to HC-12 delay(200); while (HC12.available()) { // If HC-12 has data (the AT Command response) Serial.write(HC12.read()); // Send the data to Serial monitor } digitalWrite(setPin, HIGH); // Exit AT Command mode } }

代码说明:

因此,首先,我们需要定义引脚并将“设置”引脚设置为高逻辑电平,以便模块以正常透明模式工作。首先是循环我们将传入数据存储到字符串变量中,因此我们可以更好地处理它。

// ====存储传入的数据到一个String变量while (HC12.available()){//如果HC-12有数据incomingByte = HC12.read();readBuffer += char(incomingByte); //从HC-12存储icoming字节//将每个字节添加到ReadBuffer字符串变量}

传入的数据一次始终出现一个字节,例如,如果我们从第二个arduino发送字符串“test123”,则循环将执行7次迭代。每次迭代,使用HC12.read()函数,我们将读取每个传入的字节或字符,并将其添加到名为“readbuffer”的字符串变量。

接下来让我们看看我们如何使用第一个按钮更改通信通道。因此,如果我们按下第一个按钮,请使用HC12.print()函数,我们将将字符串“AT + C001”发送给HC-12模块或第二个Arduino。

if(button1抑制== high){hc12.print(“AT + C001”);//发送AT命令到其他模块延迟(100);//Set AT Command Mode digitwrite (setPin, LOW);//设置HC-12为AT Command mode delay(100);h12 .print("AT+C001");//发送AT命令到HC-12延迟(200);while (HC12.available()){//如果HC-12有数据(AT命令响应)Serial.write(HC12.read());//将数据发送到串行监视器} Serial.println(“频道成功更改”);digitalWrite (setPin、高);//退出AT命令模式button1Pressed = LOW; }

当第二个Arduino接收到这个字符串时,我们将HC-12模块设置为at命令模式,然后写入相同的字符串“at +C001”,将模块设置为通信通道编号为1。

//第二个Arduino // === =如果按下按钮1,设置通道01如果(readBuffer == " At +C001") {digitalWrite(setPin, LOW);//设置HC-12为AT Command mode delay(100);//等待HC-12进入AT命令模式//发送AT命令到HC-12(“AT+C001”)延迟(200);while (HC12.available()){//如果HC-12有数据(AT命令响应)Serial.write(HC12.read());//将数据发送到串行监视器} Serial.println(“频道成功更改”);digitalWrite (setPin、高);//退出AT命令模式readBuffer = "";}

我们将使用下一个while循环打印来自HC-12模块的响应消息,以确定通道是否已成功更改。

while (HC12.available()){//如果HC-12有数据(AT命令响应)Serial.write(HC12.read());//将数据发送到串行监视器}

回到第一个Arduino,我们确实将AT命令发送到第一个HC-12模块相同的过程。以同样的方式,我们使用按下第二个按钮,我们设置了两个通信通道号码。因此,使用此方法,我们可以随时选择我们将与之通信的HC-12模块。

最后,checkATCommand()自定义函数通过检查字符串是否以“At”开头来检查接收到的消息是否为At命令。如果是,则进入AT命令模式并执行该命令。

// ====自定义函数-检查我们是否收到了一个AT命令通过串行监视器void checkATCommand () {if (readBuffer.startsWith("AT")){//检查字符串是否以"AT"开头digitalWrite(setPin, LOW);//设置HC-12为AT Command mode delay(200);//等待HC-12进入AT命令模式//发送AT命令到HC-12延迟(200);while (HC12.available()){//如果HC-12有数据(AT命令响应)Serial.write(HC12.read());//发送数据到串行监视器}digitalWrite(setPin, HIGH);//在命令模式下退出}}

HC-12无线通信:使用加速度计的步进电机控制

现在让我们来看看第三个例子。在这里,我们使用第一个Arduino的加速度计模块控制第二arduino的步进电机的位置。

HC-12无线通信步进电机控制使用加速度计 - 例如03

该电路还包含一个微开关,用于在0度时查找步进电机的初始位置。

HC-12无线通信步进电机控制使用加速度计 - 电路示意图

您可以从下面的链接获取此示例所需的组件:

yaboAG娱乐城披露:这些是附属链接。作为一名亚马逊助理,我从合格的购买中获得收入。

注意,我已经有了关于如何连接和使用这两个加速度计步进电机,因此对于此示例,我只会解释代码的HC-12部分。

第一个Arduino -发射机代码:

/* Arduino远程无线通信使用HC-12示例03 -步进电机控制使用加速度计-发射器,加速度计由Dejan Nedelkovski, www.HowToMechatronics.com */ #include  #include  SoftwareSerial HC12(10亚搏手机版官方下载, 11);// HC-12 TX引脚,HC-12 RX引脚浮角;int lastAngle = 0;Int count = 0;int angleSum = 0;//——加速计寄存器地址#define Power_Register 0x2D #define X_Axis_Register_DATAX0 0x32#define X_Axis_Register_DATAX1 0x33 // DATAX1内部寄存器的十六进制地址#define Y_Axis_Register_DATAY0 0x34 #define Y_Axis_Register_DATAY1 0x35 #define Z_Axis_Register_DATAZ0 0x36 #define Z_Axis_Register_DATAZ1 0x37 int ADXAddress = 0x53;//设备地址,其中也包括选择模式的第8位,在本例中读取。int X0, X1, X_out; int Y0, Y1, Y_out; int Z1, Z0, Z_out; float Xa, Ya, Za; void setup() { HC12.begin(9600); // Open serial port to HC12 Wire.begin(); // Initiate the Wire library Serial.begin(9600); delay(100); Wire.beginTransmission(ADXAddress); Wire.write(Power_Register); // Power_CTL Register // Enable measurement Wire.write(8); // Bit D3 High for measuring enable (0000 1000) Wire.endTransmission(); } void loop() { // X-axis Wire.beginTransmission(ADXAddress); // Begin transmission to the Sensor //Ask the particular registers for data Wire.write(X_Axis_Register_DATAX0); Wire.write(X_Axis_Register_DATAX1); Wire.endTransmission(); // Ends the transmission and transmits the data from the two registers Wire.requestFrom(ADXAddress, 2); // Request the transmitted two bytes from the two registers if (Wire.available() <= 2) { // X0 = Wire.read(); // Reads the data from the register X1 = Wire.read(); /* Converting the raw data of the X-Axis into X-Axis Acceleration - The output data is Two's complement - X0 as the least significant byte - X1 as the most significant byte */ X1 = X1 << 8; X_out = X0 + X1; Xa = X_out / 256.0; // Xa = output value from -1 to +1, Gravity acceleration acting on the X-Axis } //Serial.print("Xa= "); //Serial.println(X_out); // Y-Axis Wire.beginTransmission(ADXAddress); Wire.write(Y_Axis_Register_DATAY0); Wire.write(Y_Axis_Register_DATAY1); Wire.endTransmission(); Wire.requestFrom(ADXAddress, 2); if (Wire.available() <= 2) { Y0 = Wire.read(); Y1 = Wire.read(); Y1 = Y1 << 8; Y_out = Y0 + Y1; Ya = Y_out / 256.0; } // Combine X and Y values for getting the angle value from 0 to 180 degrees if (Y_out > 0) { angle = map(Y_out, 0, 256, 90, 0); } else if (Y_out < 0) { angle = map(Y_out, 256, 0, 90, 0); angle = 90 - angle; } if (X_out < 0 & Y_out < 0) { angle = 180; } if (X_out < 0 & Y_out >0) { angle = 0; } // float to int int angleInt = int(angle); // Makes 100 accelerometer readings and sends the average for smoother result angleSum = angleSum + angleInt; count++; if (count >= 100) { angleInt = angleSum / 100; angleSum = 0; count = 0; // Some more smoothing of acceleromter reading - sends the new angle only if it differes from the previous one by +-2 if (angleInt > lastAngle + 2 || angleInt < lastAngle - 2) { Serial.println(angleInt); String angleString = String(angleInt); //sends the angle value with start marker "s" and end marker "e" HC12.print("s" + angleString + "e"); delay(10); lastAngle = angleInt; angleSum = 0; count = 0; } } }

第二个arduino - 接收代码:

/ * Arduino Long系列无线通信使用HC-12示例03  - 步进电机控制采用加速度计 - 接收器,步进电机由Dejan Nedelkovski,www.www.kuaixg.com * / #include 软件中HC12(10,11);亚搏手机版官方下载// HC-12 TX引脚,HC-12 Rx PIN焦炭incomingByte;String readBuffer = "";//定义PINS Numbers Const Int Dirpin = 4;Const Int Spepin = 3;const int按钮= 2;int turperangle = 0;int lastAngle = 0;int rotate = 0;void setup() {Serial.begin(9600); // Open serial port to computer HC12.begin(9600); // Open serial port to HC12 // Sets the two pins as Outputs pinMode(dirPin, OUTPUT); pinMode(stepPin, OUTPUT); // Microswitch input, with internal pull-up resistor activated pinMode(button, INPUT_PULLUP); delay(10); digitalWrite(dirPin, HIGH); boolean startingPosition = true; while (startingPosition) { digitalWrite(stepPin, HIGH); delayMicroseconds(200); digitalWrite(stepPin, LOW); delayMicroseconds(200); if (digitalRead(button) == LOW) { startingPosition = false; } } delay(100); } void loop() { readBuffer = ""; boolean start = false; // Reads the incoming angle while (HC12.available()) { // If HC-12 has data incomingByte = HC12.read(); // Store each icoming byte from HC-12 delay(5); // Reads the data between the start "s" and end marker "e" if (start == true) { if (incomingByte != 'e') { readBuffer += char(incomingByte); // Add each byte to ReadBuffer string variable } else { start = false; } } // Checks whether the received message statrs with the start marker "s" else if ( incomingByte == 's') { start = true; // If true start reading the message } } // Converts the string into integer currentAngle = readBuffer.toInt(); // Makes sure it uses angles between 0 and 180 if (currentAngle > 0 && currentAngle < 180) { // Convert angle value to steps (depending on the selected step resolution) // A cycle = 200 steps, 180deg = 100 steps ; Resolution: Sixteenth step x16 currentAngle = map(currentAngle, 0, 180, 0, 1600); //Serial.println(currentAngle); // Prints the angle on the serial monitor digitalWrite(dirPin, LOW); // Enables the motor to move in a particular direction // Rotates the motor the amount of steps that differs from the previous positon if (currentAngle != lastAngle) { if (currentAngle > lastAngle) { rotate = currentAngle - lastAngle; for (int x = 0; x < rotate; x++) { digitalWrite(stepPin, HIGH); delayMicroseconds(400); digitalWrite(stepPin, LOW); delayMicroseconds(400); } } // rotate the other way if (currentAngle < lastAngle) { rotate = lastAngle - currentAngle; digitalWrite(dirPin, HIGH); //Changes the rotations direction for (int x = 0; x < rotate; x++) { digitalWrite(stepPin, HIGH); delayMicroseconds(400); digitalWrite(stepPin, LOW); delayMicroseconds(400); } } } lastAngle = currentAngle; // Remembers the current/ last positon } }

代码说明:

因此,首先我们定义引脚并初始化设置部分中的模块。然后我们读取加速度计的x和y轴的值,并将它们映射到0到180度的值。来自加速度计的值有时可以不稳定或摇动,因此对于平滑结果,我使用了一百个读数的平均值。

//获得100个加速度计读数并发送平滑结果的平均值angleSum = angleSum + angleInt;数+ +;if (count >= 100) {angleInt = angleSum / 100;angleSum = 0;数= 0;//更平滑的加速计读取-发送新的角度,只有它不同于之前的一个+ 2 if (angleInt > lastAngle + 2 || angleInt < lastAngle -2) {Serial.println(angleInt);String angleString = String(angleInt);//发送起始标记“s”和结束标记“e”的角度值HC12。print("s" + angleString + "e");延迟(10);lastAngle = angleInt; angleSum = 0; count = 0; } }

为了进一步平滑,我将发送新的值的角度只有当它不同于之前的2。

请注意,当将角度发送到HC-12模块时,我还在前面发送字符“s”,以及之后的字符“e”,这将在第二个Arduino接收数据时帮助我。

在第二个Arduino中,我们等待开始标记“s”到来,然后读取角度的值,直到结束标记“e”到来。这样,我们就可以确保只接收到角度的值。

//读取传入角度(hc12.available()){//,如果hc-12具有数据incomingbyte = hc12.read();//从HC-12延迟(5)中存储每个ICOMing字节;//如果(start == true){if(encomingbyte!='e')读取“开始”s“和结束标记”e“之间的数据{readbuffer + = char(encomingbyte);//将每个字节添加到readbuffer string变量} else {start = false;}} //检查收到的消息statrs是否与start标记“s”如果(incomingbyte =='s'){start = true;//如果真实开始阅读消息}}

然后,我们将值转换为整数,并将值从0到1600步映射,这对应于A4988步进驱动程序处所选择的十六分辨率。然后我们将步进电机旋转到电流角度。

这一切都是为了这个arduino教程。随意询问以下意见部分中的任何问题。

14回应

  1. Zeeshan.

    你好先生,能否告诉我可以实现的最大范围。我可以从这个模块开始远程控制飞机

    回复
  2. 标记

    我认为这是一个了不起的项目,我想使用类似于远程控制螺线管的东西。不过我有两个问题:

    1.您提到“解耦电容”,但不是其值或方向。你能更详细地解释一下吗?

    2.其他人是否干扰了抓住了接受Arduino的控制的信号?基本上,篡改了担心吗?

    谢谢你的帮助。

    回复
    • Dejan Nedelkovski.

      解耦电容提供稳定和平滑的电源模块。至于这个值,你可以使用0.1到10uF的任何东西。负极接地,正极接VCC。
      至于篡改,我没有太多信息,但我不相信这个便宜的模块可以提供高安全性。

      回复
  3. 斯宾塞

    你好Dejan ...我在哪里可以买到...... HC-12模块.. ??
    我已经扫描了网......发现没有.. !!!
    他们停了下来.. ???(它可能是安全风险......如在南非...... 433 MHz代码跳跃已经...... Hi-Jacked ......我知道我是受害者)..
    (联系我. .我会告诉你我是如何打败骗子的!)..
    谢谢. . ! !

    回复
    • 德国

      是的,这是可能的,但你仍然需要两个arduinos。一个发送数据,另一个是接受数据并通过串行端口将其提供给PC。

      回复
    • Dk

      是也可能与单个Arduino有可能,但您必须使用HC05 BT模块(其不会像HC12那样高级别)

      回复
  4. ichi.

    亲爱的呵呵,
    漂亮的教程,谢谢。我有一个问题,可以控制两个直流电机和一个LED只有1个链接吗?我的意思是我可以通过这种方法远程控制两个直流电机的运动,然后通过该方法打开或关闭LED?

    回复
    • 德国

      嘿,谢谢!是的,你应该可以做到。你只需要向接收者发送适当的指示器和/或值。当然,编码或编程也取决于直流电机的控制方法。

      回复
  5. 帕特里克

    哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇
    我有一个问题,有没有办法可以控制电脑我的手机?我的意思是我可以通过Arduino HC-12从手机中控制DC电机吗?

    回复
  6. Antoine.

    你好,
    不错的教程!
    我试图制作相同的项目,但我遇到了这个范围的问题。
    连接损失10米。我们远远超过1.8公里的数据表。我试图改变参数,但它确实改变了任何东西。
    您对系统有什么范围?10米,100米,500米?
    你有什么技巧来帮助我吗?
    谢谢您的回答
    Antoine.

    回复
    • 德国

      嘿,谢谢!
      嗯尝试使用外部5V电源,Arduino 5V可能对您的模块不够。还要确保使用解耦电容。

      回复

发表评论

您的电子邮件地址不会被公开。

受到推崇的

2019年初学者和爱好者的最佳进入级示波器

为初学者和爱好者最好的示波器

受到推崇的

2019年初学者的8个最佳Arduino Starter Kits

初学者的8个最佳Arduino Starter Kits

受到推崇的

最佳3D打印机初学者和爱好者- 3D打印

最好的3d打印机初学者和爱好者