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类。