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

Arduino中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

12
返回列表 发新帖
楼主: xiaozhuzc

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

[复制链接]
 楼主| 发表于 2021-7-4 13:12 | 显示全部楼层
topdog 发表于 2021-7-4 12:03
程序要分发射端和接收端

(这个是接收端arduino的代码)

(这个是发送端arduino的代码)



这个代码我在UNO上跑没问题,二极管能亮,但是在nano上好像就不行啊。接收端arduino nano的rx灯是亮的,但是available函数的返回值却一直是0,我换了块nano的板子还是这样,UNO的缓冲区和nano有什么不一样的吗?
具体要如何修改啊?
捕获.JPG
捕获2.JPG
 楼主| 发表于 2021-7-4 13:14 | 显示全部楼层

zigbee我设置过了,好像没问题啊,我电脑上串口助手能接受到信息,使用UNO也能接受到,但是好像就是nano不行
发表于 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-4 17:45 | 显示全部楼层
你如果学有余力可以看一下《Microduino BLE core 开发环境的搭建和跑马灯》https://www.arduino.cn/thread-49897-1-2.html,这个方法也能用于zigbee。
 楼主| 发表于 2021-7-4 19:34 | 显示全部楼层
topdog 发表于 2021-7-4 16:51
zigbee是无线传输工作的一种协议。关于zigbee中的不同频率,主流频段是2.4G,另外还有欧洲频段,868MHz,北 ...

谢谢大佬,成功了
但是还有一个问题想请教一下,为什么使用硬件串口就无法通讯,使用软件模拟串口却可以呢?
发表于 2021-7-4 20:53 | 显示全部楼层
xiaozhuzc 发表于 2021-7-4 19:34
谢谢大佬,成功了
但是还有一个问题想请教一下,为什么使用硬件串口就无法通讯,使用软件模拟 ...

Arduino入门简单,还是从基础入手,不要好高骛远。
 楼主| 发表于 2021-7-4 22:34 | 显示全部楼层
topdog 发表于 2021-7-4 20:53
Arduino入门简单,还是从基础入手,不要好高骛远。

嗯嗯,谢谢大佬
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-11-29 03:45 , Processed in 0.078958 second(s), 16 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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