【求助】关于arduino的无线通讯问题-Arduino中文社区 - Powered by Discuz!

Arduino中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 5962|回复: 17

[未解决] 【求助】关于arduino的无线通讯问题

[复制链接]
发表于 2021-7-3 22:01 | 显示全部楼层 |阅读模式
两块arduino nano的板子,目的是如若无线通讯有接受到数据,那么小灯常亮。

在使用zigbee的点对点无线ttl通讯模式的情况下,发送段的arduino的tx灯常亮,接收端的arduino的rx灯常亮。说明数据的收发应该没有问题,但是小灯却不亮。



但是如果两块arduino使用有线ttl通讯(直插),发送段的arduino的tx灯和接收端的arduino的rx灯依旧常亮,但是不同的是小灯这次却能亮,说明代码应该也没有问题啊。


为什么相同的情况,但是无线通讯不可以啊?波特率,频道都相同,AB端也都设置好了,供电方式从usb供电,到vin引脚供电也都尝试了,都不行啊,想求助各位大佬,是什么原因啊


捕获.JPG
(接受端代码)



发送端代码

发送端代码

(输出端代码)




有线直插,常亮

有线直插,常亮

(有线直插,灯亮)





无线zigbee,不亮

无线zigbee,不亮


(无线点对点zigbee,不亮)



发表于 2021-7-4 16:51 | 显示全部楼层
本帖最后由 topdog 于 2021-7-4 18:04 编辑

zigbee是无线传输工作的一种协议。关于zigbee中的不同频率,主流频段是2.4G,另外还有欧洲频段,868MHz,北美频段,915MHz。工作模式有:点对点和广播。一般由两个模块配合来实现控制。一收一发或者称为一主(Master)一从(Slave)。市场上流行的zigbee模块固件一般采用AT命令,配置可以使用usb-ttl模块来设置。设置好采用MCU软串口发送信息,软串口的波特率要和zigbee模块一致,有的厂商强制9600。接线一般要回避D0,D1管脚,接D2,D3管脚吧。

本例PC发送命令,建立zigbee无线连接,MCU解析和执行命令。接收端D7接led。SoftwareSerial库是Arduino IDE自带的,特别注意rxPin, txPin对象的缺省值:SoftwareSerial mySerial(rxPin, txPin)
zigbee1.jpg

程序如下:
接pc的发送端(Master):

[pre]#include <SoftwareSerial.h>   //Software Serial Port
const int  RxD = 2;
const int TxD = 3;

SoftwareSerial Zigbee(RxD, TxD);

void setup()
{
  Serial.begin(9600);
  Zigbee.begin(9600);
  pinMode(RxD, INPUT);
  pinMode(TxD, OUTPUT);
}

void loop()
{
  char recvChar;

  if (Zigbee.available()) { //check if there's any data sent from the remote Zigbee shield
    recvChar = Zigbee.read();
    Serial.print(recvChar);
  }
  if (Serial.available()) { //check if there's any data sent from the local serial terminal, you can add the other applications here
    recvChar  = Serial.read();
    Zigbee.print(recvChar);
  }

}[/pre]
接MCU接收端(Slave):
[pre]#include <SoftwareSerial.h>   //Software Serial Port
const int  RxD = 2;
const int TxD = 3;
const int LED = 7;

SoftwareSerial Zigbee(RxD, TxD);

void setup()
{
  Serial.begin(9600);
  Zigbee.begin(9600);
  pinMode(RxD, INPUT);
  pinMode(TxD, OUTPUT);
  pinMode(LED, OUTPUT);
}

void loop()
{
  char recvChar;

  if (Zigbee.available() > 0) {
    recvChar = Zigbee.read();
    Serial.print(recvChar);
    digitalWrite(LED, HIGH);
  } else {
    digitalWrite(LED, LOW);
  }

  if (Serial.available()) {
    recvChar  = Serial.read();
    Zigbee.print(recvChar);
  }

}[/pre]
晋级可以看一下《串口分析字符操作符,灵活的实现自动化控制》https://www.arduino.cn/thread-104455-1-1.html ,实现更多眼花缭乱的应用。

发表于 2021-7-3 22:21 | 显示全部楼层
程序写错了。
 楼主| 发表于 2021-7-3 22:37 | 显示全部楼层

请问一下,哪里错了啊
发表于 2021-7-3 23:12 | 显示全部楼层
xiaozhuzc 发表于 2021-7-3 22:37
请问一下,哪里错了啊

接线错,程序错。全错了!
 楼主| 发表于 2021-7-4 01:30 | 显示全部楼层
topdog 发表于 2021-7-3 23:12
接线错,程序错。全错了!

可以具体地说一下是哪些方面错了吗?
刚开始玩arduino,不是特别懂
 楼主| 发表于 2021-7-4 01:35 | 显示全部楼层
topdog 发表于 2021-7-3 23:12
接线错,程序错。全错了!

应该需要怎么修改啊
 楼主| 发表于 2021-7-4 03:19 来自手机 | 显示全部楼层
topdog 发表于 2021-7-3 23:12
接线错,程序错。全错了!

抱歉抱歉,我上面写错了,我想用的是uart通讯方式进行无线通讯。线路和程序我再次检查过了,真的不知道该怎么做。希望大佬指点指点
(下面附上接线图)
mmexport1625339850099.jpg
发表于 2021-7-4 11:49 | 显示全部楼层
xiaozhuzc 发表于 2021-7-4 03:19
抱歉抱歉,我上面写错了,我想用的是uart通讯方式进行无线通讯。线路和程序我再次检查过了,真的不知道该 ...

发射端和接收端要分开画。
发表于 2021-7-4 12:03 | 显示全部楼层
xiaozhuzc 发表于 2021-7-4 03:19
抱歉抱歉,我上面写错了,我想用的是uart通讯方式进行无线通讯。线路和程序我再次检查过了,真的不知道该 ...

程序要分发射端和接收端
发表于 2021-7-4 12:03 | 显示全部楼层
xiaozhuzc 发表于 2021-7-4 03:19
抱歉抱歉,我上面写错了,我想用的是uart通讯方式进行无线通讯。线路和程序我再次检查过了,真的不知道该 ...

配置好Zigbee模式
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|Archiver|手机版|Arduino中文社区

GMT+8, 2024-11-29 03:39 , Processed in 0.153525 second(s), 19 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表