Arduino Leonardo 的串口问题

  • 内容
  • ....
  • 相关

最近在折腾自平衡小车,使用了Arduino Leonardo作为控制板,使用一块Leonardo +(SKU: DRI0023) 双路步进电机驱动扩展板(DRV8825) + (SKU:TEL0092)WiFi Bee-ESP8266 无线模块搭建,WiFi Bee-ESP8266 无线模块作为接收, 双路步进电机驱动扩展板驱动小车动作。

Arduino Leonardo控制板

Arduino Leonardo是基于ATmega32u4一个微控制器板。它有20个数字输入/输出引脚(其中7个可用于PWM输出、12个可用于模拟输入),一个16 MHz的晶体振荡器,一个Micro USB接口,一个DC接口,一个ICSP接口,一个复位按钮。它包含了支持微控制器所需的一切,你可以简单地通过把它连接到计算机的USB接口,或者使用AC-DC适配器,再或者用电池来驱动它。Leonardo不同于之前所有的arduino控制器,他直接使用了ATmega32u4的USB通信功能,取消了USB转UART芯片。这使得Leonardo不仅可以作为一个虚拟的(CDC)串行/ COM端口,还可以作为鼠标或者键盘连接到计算机。购买地址如下:

原版:taobao地址

兼容版:taobao地址

SKU: DRI0023) 双路步进电机驱动扩展板(DRV8825) 

技术规格

  • 适用于两相四线步进电机
  • 板上带两块DRV8825驱动芯片,并已安装散热片;
  • 驱动芯片输入电压8.2-45V,输出电流1.6A;
  • 通过六个数字I/O驱动2个步进电机;
  • 驱动芯片使能引脚引出至两个数字口,可分别使能电机;
  • 扩展板兼容Arduino UNO R3、Leonardo、Mega等控制器,具备完整端口扩展功能。预留XBee,XBee Wi-Fi,蓝牙和射频模块接口,保证您无线通信的需要。
  • 具备6个模拟口,8个数字口和1个I2C接口。在连接方式上,按压式无螺丝接线柱能够轻松与电机连接。具体接线,请参考我们的产品资料库。
  • 每个步进电机都有一个拨码开关设置步进分辨率。6种不同的步进模式:全,1/2,1/4,1/8,1/16,1/32步模式,具体调试说明请参考产品资料库。
  • 板子Xbee接口角落上有一个wireless开关。PROG时停止无线模块工作,可用USB编程。RUN时能够用无线模块通信。

购买地址:taobao地址

SKU: DRI0023) 双路步进电机驱动扩展板(DRV8825) 的针脚定义连接图。

 (SKU:TEL0092)WiFi Bee-ESP8266 无线模块

概述

Wifi Bee-ESP8266 是采用XBEE造型设计的串口转WIFI解决方案的模块,体积尺寸紧凑,兼容XBEE的扩展底座,适用于各种3.3V的单片机系统。可用于扩展Arduino, 实现无线数据传输,远程控制。板载开关可用于方便地选择启动模块或者升级固件。

ESP8266 拥有强大的片上处理和存储能力,内置32位处理器,内置Lwip协议栈。支持AP+STA模式共存,可通过AT指令配置各种参数

性能描述

  • Wi-Fi Direct (P2P)、soft-AP
  • 内置 TCP/IP 协议栈
  • 内置低功率 32 位 CPU:可以兼作应用处理器
  • 支持 WPA WPA2/WPA2–PSK加密
  • 支持UART接口
  • 支持TTL串口到无线的应用
  • 工作电压:3.3V,功耗<240Ma
  • 无线标准:IEEE802.11b/g/n
  • 频率: 2.4 GHz

购买地址:taobao地址

 (SKU:TEL0092)WiFi Bee-ESP8266 无线模块的针脚定义。

自平衡机器人项目

制作方案和制作过程来自于:https://www.jjrobots.com/much-more-than-a-self-balancing-robot/ 的自平衡机器人项目(后续补充具体过程)

 

Arduino Leonardo board 的串口特性

char val;
int ledpin=10;
void setup()
{
  Serial.begin(9600);
  while (!Serial) ;
  pinMode(ledpin,OUTPUT);
}
void loop()
{
  val=Serial.read();
  if(val=='r')
  {
    digitalWrite(ledpin,HIGH);
    delay(500);
    digitalWrite(ledpin,LOW);
    delay(500);
    Serial.println("OK");
  }
 }

在测试Wifi bee模块连接的过程中,使用Leonardo总是提示“connect AP timeout”,而采用Arduino UNO则不会出现这个问题。遍寻baidu、google,同时查阅官网资料后,看到这样一段说明:
The Arduino Leonardo board uses Serial1 to communicate via TTL (5V) serial on pins 0 (RX) and 1 (TX). Serial is reserved for USB CDC communication.原来,Arduino Leonardo board 使用串口通信,必须用 Serial1 ,而 Serial是保留给USB通信的。于是把代码中的 Serial全部改为 Serial1 。测试成功。

UART:0(RX)和1(TX) 使用ATmega32U4硬件串口,用于接收(RX)和发送(TX)的TTL串行数据。需要注意的是,Leonardo,的Serial类是指USB(CDC)的通信,而引脚0和1的TTL串口使用Serial1类。