Arduino Mega 2560+WiFi R3 游览





5.00/5 (13投票s)
使用这个便宜、强大、小巧的设备创造奇迹
引言
Arduino Mega 2560+WiFi 是一款面向机器人技术的 Arduino 开发板,因此它提供了大量的模拟和数字输入输出,而且不是一个,而是四个!硬件 UART 用于进行串行通信。额外的硬件串行端口非常适合用于调试,因为即使您使用其他硬件串行端口与板载 ESP8266 WiFi 收发器通信,也可以将其日志记录下来。数十个输入输出可以用于控制设备或从传感器读取数据,它们足以让您运行像机器人这样的东西。
不幸的是,这些设备通常不带任何软件和说明书——什么都没有,甚至没有数据手册。经过一两天摸索和踩到一个“地雷”之后,我已经掌握了窍门,我打算教您如何使用这些东西而不会把它“变砖”。是的,您确实可以把它们“变砖”——或者至少把它们的 WiFi 收发器变砖。对于那些不知道“变砖”是什么意思的人,我想您很幸运。“变砖”就是把一个设备变成一块砖头,一个镇纸,或者一个门挡。您明白我的意思——垃圾。这就是可刷写硬件的有趣之处。
我们开始吧,祝您好运!
为什么选择这块特定的开发板?
考虑到这些开发板的相对成本,我认为 Arduino Mega 2560+WiFi 及其克隆板值得多花一点钱,即使仅仅是因为它有四个硬件串行 UART。虽然 Arduino 可以通过软件模拟 UART 与串行设备交互,但它们无法以 115200 波特率进行操作。由于板载 WiFi 小部件占用了一个硬件串行端口,因此通过 USB 连接将主串行端口作为 COM 端口使用是很不错的。这只有在至少有两个内置硬件串行端口的情况下才可能实现。这样,我们可以将一个用于调试或输出其他信息,而另一个则用于通过 WiFi 收发器进行通信。
需要注意的是,其他更便宜的开发板,如 Arduino Uno,仍然可以使用 ESP8266 WiFi 收发器,但它们无法以高速通信,因为它们没有额外的硬件串行端口可供使用。
另一个优点是它拥有大量的模拟和数字 I/O 引脚可供使用。对于大多数项目,您不太可能耗尽 I/O。您可以将如此多的传感器、电机和其他小部件连接到这个设备上,简直令人难以置信,所以如果您的项目范围随着时间的推移而扩展,这块开发板可以与您一同成长。
最后,这个开发板似乎可以非常稳定地通过 USB(或交流电,或 9v 电池)供电,而如果 ESP8266 WiFi 模块是外置而不是集成的话,则需要为 ESP8266 提供额外的电源才能可靠运行。我通过单独使用 USB 为集成式设置供电,没有遇到任何问题。
简而言之,这款开发板功能齐全,功耗低,外形小巧。
拆箱与安装这堆东西
开箱 Mega 2560 + WiFi R3
我喜欢深入探究事物以了解它们,这总是让我惹上麻烦。我喜欢麻烦,所以我们首先要拆箱,摆弄它,然后打开它。别担心,我们还没把它弄坏。我会把它留到文章后面。开玩笑的!
我们首先需要做的是验证 8 位拨码开关阵列是否配置正确。我想这里的开发板都差不多,因为它们都是克隆品。它应该在您的开发板中心附近,看起来像这样
抱歉,图片有点模糊。我手机的摄像头不配合。蓝色的污迹是因为我用来拨动开关的笔留下的墨水。除非您要做一些我们这里不会涉及的事情,否则您需要将开关设置为启用 WiFi 并将其连接到第 4 个硬件串行总线,并允许刷写 Mega。要做到这一点,您需要将前四个开关(1-4)设置为 ON,后四个开关(5-8)设置为 OFF。我是通过查阅我在网上找到的零星信息,加上一点点实验和有根据的猜测才弄清楚的。我对此非常有信心。别那样看我。
另外,你的开发板上有一个开关,一面是TXD0,另一面是TXD3。我的摄像头很糟糕,但你会发现它在较低数字I/O引脚的插针附近。确保开关拨到TXD3一侧。
一旦您整理好这些,您的特定开发板应该附带一根打印机式 USB 线缆或一根 microUSB 线缆。我的是 microUSB。只需将其插入您的电脑和开发板,享受微小的灯光秀。
安装和配置 Arduino IDE
接下来到这里下载IDE并安装。我用的是Linux版本,但你们很多人可能会用Windows版本。对于Linux版本,你必须调整/dev/ttyXXX
文件的权限才能使其工作。幸运的是,他们这里有介绍。
安装完成后,您可以启动它,但要小心“工具”菜单。我因为乱动它而破坏了我的 ESP8266 固件。我恢复了,但这花了一个晚上和一些揪头发的功夫。我会引导您安全地配置它以与您的设备配合使用,这样您就不会经历我所经历的一切。
您需要进入“工具”菜单,并确保您的“开发板
”设置为“Arduino Mega 或 Arduino Mega 2560”,并且您的“处理器
”设置为“ATmega2560”。除非您确定知道自己在做什么,否则请勿更改此设置。
安装WiFi库
接下来您要做的是忽略您在网上读到的所有关于针对 ESP8266 WiFi 设备编程的内容——可能包括本文。问题是存在几种不同的库,甚至不同的 ESP8266 固件可供使用。这让我陷入了麻烦。我们不会使用自定义 ESP8266 固件。我们将使用 ESP8266 设备的标准“AT 固件”。我们将使用一个名为 WiFiEsp
的可靠库,通过 ESP8266 默认公开的“AT 命令集”与板载 ESP8266 进行通信。这使得您的 WiFi 硬件使用类似于老式 Hayes 调制解调器的命令样式进行通信。不同的固件可以将此命令集更改为其他内容,例如 Micropython。这听起来很酷。也许是吧。我们这里不会接近这些,因为我不想让你们中的任何一个人因为弄坏了设备的一部分而回来找我。
相反,我们将使用 `WiFiEsp` 库,它用一个漂亮的 API 封装了底层的 AT 命令,您可以使用该 API 扫描和连接 WiFi 网络。我不会超出一些基础知识来介绍这个库,因为它有点超出了本文的范围。您会希望安装这个库来利用那个出色的 ESP8266 WiFi 小部件。我安装最新版本时遇到了校验和失败的问题,但似乎在我安装了一个稍旧的版本后,它自己更新到了最新版本。您可以在“**工具**”|“**管理库...**”下找到它。您将使用出现的对话框搜索 `WiFiEsp` 并安装它。如果它报错,请像我一样尝试以前的版本。
编写这个混乱的程序
Arduino IDE 提供了一个可爱的小 C(ish?)编译器供您使用。如果您不熟悉 C,那也没关系。一旦您摆脱了指针操作,它就没有什么令人望而生畏的地方,并且您不需要 C 中任何棘手的东西就能让它工作。一切都非常简单,一旦您熟悉了,示例代码也相当不错。让我们开始吧。
基础知识
每个 Arduino 应用程序都会有两个方法,即 setup()
和 loop()
。第一个方法在复位或上电时调用一次。第二个方法在此之后简单地重复调用,直到复位或关机。它们不带参数,不返回任何值。对于熟悉 C 语言的人来说,没有 main()
。
void setup() {
Serial.begin(115200);
}
void loop() {
Serial.println("Hello world!");
delay(1000);
}
上面的 hello world 应用程序通过 USB 的 COM/串行端口以 115200 波特率传输“Hello world!”。点击“上传”按钮或“草图”|“上传”后,您可以使用“工具”|“串行监视器”查看上述代码的输出。每秒钟,它会通过串行端口传输另一行“Hello World!”。请记住这种技术,因为它是您记录或调试代码的主要方式。这意味着如果您将此设备插入 USB 端口,该端口的所有者可以通过监视暴露的虚拟 COM/串行端口来查看您在示例中通过 print()
和 println()
发出的所有这些友好的状态消息。
这很酷,但现在我们应该介绍一些我们可以用来连接小部件和传感器的引脚和东西。我这里只介绍数字引脚。Arduino IDE 附带了几乎所有东西的示例代码。
开发板上的每个数字 I/O 引脚跳线都应标有一个数字。该数字是该引脚在软件中的 ID。我的开发板上似乎有 54 个数字 I/O 引脚。有些引脚被硬件串行端口占用。它们仍然可以连接,但通常应该保持不动。这包括引脚 0 和引脚 1,因此对于您自己的项目,请从引脚 2 开始。这些引脚的优点是它们可以用作输入或输出。您可以在代码中设置 pinMode()
来更改它,例如:
pinMode(2,INPUT); // pin 2 can now be read from.
pinMode(3,OUPUT); // pin 3 can now be written to.
我认为其中一些引脚可能是 +3.3VDC,因此除非另有标记为 +5VDC,否则我绝不会输入超过 3.3VDC 的电压。请小心。不要烧坏你的小板子。
现在您可以使用 digitalRead()
和 digitalWrite()
来获取或设置引脚上的电量值。
if(0!=digitalRead(2))
Serial.println("pin 2 is high!");
digitalWrite(3,HIGH);
使用 WifiEsp 编程
与上面一样,我旨在为您提供足够的内容,让您开始使用,此外“文件”|“示例”|“WiFiEsp”下有许多示例可供您入门。
我们将使用串行通信与我们的 Wifi 设备通信。许多代码都假定您使用的是软件串行接口,但我们高级的开发板具有硬件串行。示例中的代码对此进行了某种程度的说明,但它期望 WiFi 设备连接在第二个硬件串行端口 Serial1
上,而在我们的开发板上,它将是 Serial3
。我将在下面向您展示。首先,以下是您可以在任何示例代码开头找到的内容。
#include "WiFiEsp.h"
// Emulate Serial1 on pins 6/7 if not present
#ifndef HAVE_HWSERIAL1
#include "SoftwareSerial.h"
SoftwareSerial Serial1(6, 7); // RX, TX
#endif
这不适合我们。这更像是用于带有外部 ESP8266 的 Uno 板或类似的东西。我们必须编辑这段代码。由于我们是专门为我们的开发板编写代码,我们不需要 #ifndef
条件,也不需要它里面的 #include
,这将简化代码。最后,正如我所提到的,我们的 WiFi 小部件连接到该开发板上的 Serial3
,而不是 Serial1
。因此,我们可以简单地删除上面 #include "WifiEsp.h"
之后的所有行。我们不再需要它们了。但是,我们必须将后续代码中对 Serial1
的所有引用更改为 Serial3
。通常这只意味着更改两行,这对我们来说很好
Serial1.begin(9600);
变成
Serial3.begin(115200);
更改以粗体显示。注意我们也把 9600 的值改成了 115200。这是波特率,我们提高了它,因为较低的值是为了适应软件串行。我们有高级的硬件串行,它更快,所以我们让它更快。
示例代码中要更改的另一行是
WiFi.init(&Serial1);
变为
WiFi.init(&Serial3);
您还会在示例代码中看到对 Serial.begin()
、Serial.print()
和类似内容的引用。Serial
本质上是“Serial0
”,我们之前已经对此进行了一些介绍。它指的是我们的第一个硬件串行端口,一个通过 USB 连接器暴露为虚拟 COM/串行端口的端口。在代码中不要混淆 Serial
和 Serial3
,因为它们是两个独立的串行端口。
上述修改应该适用于文件菜单下的大部分 WiFiEsp 示例,这将使您能够开始进行 WiFi 通信。使用示例代码来解决具体问题。我可能会在未来的文章中介绍它。
关注点
ESP8266 的 Tensilica CPU 也许是板载两个处理器中更有趣的一个,而且功能更强大,但它只专注于处理 WiFi 通信和 TCP/IP 协议栈。ESP8266 WiFi 适配器包含自己的 TCP/IP 协议栈和以 80MHz 运行的 CPU,而 Mega 以 16MHz 运行,因此它比 Mega 更强大。显然,一些软件包可以将这种设置配置为将 Mega CPU подчинить ESP8266 中的 Tensilica CPU,这可能会产生一个非常有趣且强大的微型设备。这对我来说很着迷,但它也是一个巨大的痛苦,而且很容易搞砸。我不小心通过在 Arduino IDE 中乱搞刷写了它的固件。我们这里不会这样做,至少在这篇文章中不会,但这是一个值得思考的问题。
历史
- 2020年10月30日 - 初次提交