Arduino WEMOS 和 RAMPS

3D打印 DIY-3d-打印机 坡道-1.4
2021-05-25 05:02:37

我正在考虑购买Arduino WEMOS 1,因为我厌倦了摆弄 SD 卡。

Arduino WEMOS

由于 ESP8266 芯片具有 32 Mb (~4 MB) 闪存,我希望能够通过 Wi-Fi 推送大多数 G 代码文件。

我正在尝试 OctoPi,但是由于电子噪声问题,传输不稳定。

有没有人用 RAMPS 试过 WEMOS?ESP 和 Arduino 之间的串行通信是否稳定?


1产品描述为Mega +WiFi R3 ATmega2560+ESP8266(32Mb 内存),USB-TTL CH340G。兼容 Arduino Mega、NodeMCU、WeMos ESP8266

1个回答

在研究了它们之后,这些板子当然看起来很有趣。

这块板似乎有两种变体,因为我看过RobotDyn 的照片

RobotDyn板

后部(来自 Instructables)

RobotDyn 板(后)

WeMos徽标。

WeMos 板

它们可能相同,也可能不同。还有这个,只有一个通用的“WiFi”标志(来自下面的 eBay 页面):

通用板

内存差异

但是,在规格和内存量方面肯定存在一些差异(除非有许多变体 - 这肯定是可能的):

看看这篇文章 Instructables - Arduino MEGA 2560 With WiFi Built-in - ESP8266,它不完全是 ESP8266-12:

在今天的文章中,我们讨论了一个我认为非常特别的 Arduino,因为它的电路板上嵌入了 ESP8266。它没有将 ESP12 焊接到板上。相反,它具有乐鑫芯片。所以,在板上你有内置 4MB 内存的 Tensilica 芯片,以及 ATmega2560,这是传统的 Arduino Mega。

所以 ESP 有 4 MB,但 32 Mb 在哪里发挥作用?

好吧,看看这个 RobotDyn 内存表(取自 Instructables 页面):

RobotDyn 内存表

ESP 的 4 MB 似乎立即被矛盾并升级到 8 MB!ATmega2560不知何故有 32 Mb(这似乎有点撒谎 - 因为没有知道的 ATmega2560有那么多内存2),并且被相应的文本进一步混淆:

正如我们在上表中看到的,ATmega 有 32MB 的内存,不包括 ESP 内存。这太棒了,因为传统的 Mega Arduino 只有 256kb 的内存。

所以MB还是MbATmega2560 外部是否有额外的闪存 IC?查看来自俄罗斯 RobotDyn 页面的示意图,似乎没有:

RobotDyn 原理图

所以这可能是无稽之谈。按照逻辑,ATmega 有 256 kB,ESP 有 4 MB ......但我可能错了......?

来自Контроллер RobotDyn Mega 2560 R3 + WiFi ESP8266b、闪存 память 8Mbit、USB-TTL CH340G、MicroUSB 的链接


通讯可靠性

无论实际规格如何,为了解决您的 ESP/Arduino 通信可靠性问题:

由于 ESP8266 和 ATmega2560 在一块板上,人们会假设两者之间的(串行)通信是无故障的。但是,已经报告了一些问题3

尽管如此,从您的问题来看,您似乎遇到了 ESP 与 OctoPi 通信的问题,而不是 ESP 与 Arduino 的问题,所以这可能实际上并不能回答您的问题。

此外,关于它们与 RAMPS 的兼容性,目前可用的信息很少,似乎是一个试一试的情况。我得到的最接近的是这个帖子OnStep 和 RAMPS1.4,但它似乎是垃圾邮件。

然而,这听起来确实值得一赌,因为它将是技术的完美结合。但是,我认为需要对固件进行一些修改。


有用的笔记

  • 来自Mega + WiFi R3 ATmega2560 + ESP8266 (8 Mb memoire) 的#8 帖子

要将草图上传到板上:

5, 6, 7 ON
RXD3 - TXD3   

要运行草图:

5 and 6 ON
RXD3 - TXD3

脚注

1 来自WeMOS Mega + WiFi R3 ATmega2560 + ESP8266 USB-TTL 用于 Arduino Mega NodeMCU

WeMOS Mega + WiFi R3 ATmega2560 + ESP8266 USB-TTL 适用于 Arduino Mega NodeMCU  

特征:

  • 完全集成在一块板上:Mega R3 ATmega2560 和 WiFi ESP8266 带内存 32Mb(兆字节)
  • 所有模块可以一起工作,也可以单独工作。每个人都有自己的引脚排针
  • 开发需要Uno和WiFi的新项目的便捷解决方案

  • 通过 USB,您可以更新 ATmega2560 和 ESP8266 的草图和固件。为此,船上有 USB 串行转换器 CH340G

  • 使用这个板子很简单
  • 板上有 DIP 开关,用于连接模块。例如到:
    • USB和ATmeg2560,
    • USB和ESP8266,
    • ATmega2560 和 ESP8266

表 DIP- 开关:

Connection                                                          DIP
                                           1        2        3         4       5         6        7
ATmega2560<->ESP8266                      ON       ON       OFF       OFF     OFF       OFF      OFF
USB <->ATmega2560                         OFF      OFF      ON        ON      OFF       OFF      OFF
USB<->ESP8266 (Update firmware or sketch) OFF      OFF      OFF       OFF     ON        ON       ON
USB<->ESP8266 (communication)             OFF      OFF      OFF       OFF     ON        ON       OFF
All independent                           OFF      OFF      OFF       OFF     OFF       OFF      OFF

Special solution:
USB <->ATmega328<-> ESP8266
Connection                                                          DIP                                     SWITCH 2
                                           1        2        3         4       5         6        7

USB <-> ATmega2560<-> ESP8266             ON       ON       ON        ON      OFF       OFF      OFF         To RXD3/TXD3
  • USB 转换器 CH340G 连接到 ATmega2560 的 RX0/TX0
  • ESP8266 连接 ATmega2560 的 RX3/TX3

尺寸:10.5x5.3cm/4.13x2.09inch

2来自Atmel ATmega640/V-1280/V -1281/V-2560/V-2561/V 数据表

ATmega256内存

3兆丰+无线R3 ATmega2560 + ESP8266(8 MB备忘录),有似乎是用ATmega和ESP集成电路之间的通信,与一些用户报告问题的一些问题。

但是,提供了几种解决方案:

方案一

来自帖子 #2

  1. 将 DIP 开关设置为“特殊”模式: ( 1=on, 2=on, 3=on, 4=on, 5=off, 6=off, 7=off, 8=off) 参见产品说明

  2. 在RXD3设置开关

  3. 运行下面的草图,更改 SSID 和 PASSWORD 值。这只是为了测试 Arduino 和 ESP8266 是否协同工作。该代码源自 Element14 中的 BISSA ORBOEA。

代码:

#include "ESP8266.h"

#define SSID        "YOURSID"
#define PASSWORD    "YOURPASSWORD"

ESP8266 wifi(Serial3,115200);

void setup() {


  Serial.begin(9600);              

  Serial.println("Restart");
  wifi.restart();
  delay(1000);

  Serial.println("FW Version:");
  Serial.println(wifi.getVersion().c_str());

    if (wifi.setOprToStation()) {
        Serial.println("OprToStation ok");    }
        else {
        Serial.println("OprToStation  err");
    }

    if (wifi.joinAP(SSID, PASSWORD)) {
        Serial.println("Join AP success");

        Serial.print("IP:");
        Serial.println( wifi.getLocalIP().c_str());      
    } else {
        Serial.println("Join AP failure");
    }
}


void loop()
{
}

解决方案2

来自帖子 #6

首先,您需要根据您的应用程序为每个板编写代码,但是在您的代码中,您需要在两个代码中的 Atmega 和 ESP 的串行端口之间建立通信,再次根据您的应用程序。最后,放置使两者之间进行内部互连的开关。

例如,我为 ESP 编写了一个代码,用于连接接入点并放在 TCP 服务器上。当无线客户端连接到 ESP 并因此连接到 TCP 服务器时,客户端发送的所有数据我都重定向到串行端口。由于ESP的串口与Atmega的串口3相连,因此Atmega中的代码将串口3的数据传递给atmega。

解决方案3

来自帖子 #11

如果您与我的情况相同,请按照以下步骤操作:

  1. 通过将 DIP 配置为 5:on,6:on,7:on 和其他关闭,编程到 ESP(上传草图)以进行 wifi 连接。
  2. 程序到 mega(上传草图),以防您想通过将 Dip 配置为 3:on、4:on 和其他关闭来相互发送通信。
  3. 切换两个 RX0/TX0(在我的情况下,我使用 Serial.print() 和 Serial.readString() 在 Esp 和 Mega 之间进行通信)
  4. 将草图上传到两个模块后,您可以通过将 DIP 配置为:1:on,2:on,3:on,4:on 来测试它们之间的通信。然后按重置按钮重新启动板。

  5. 在 ESP 中,您可以通过 if(Serial.available()) Serial.readString(); 从 Mega 获取字符串。在超级中,您可以通过以下方式从 ESP 获取数据:if(Serial.available())Serial.readString()。

  6. 在你得到一个字符串之后,你就可以拆分或做任何你想做的事情。
  7. 如果要将数据发送到 Firebase,则必须在 Esp 端使用 Firebase 库,在 Mega 中它不支持。