Arduino MQTT通过SoftSerial端口

时间:2016-02-20 09:29:51

标签: arduino mqtt esp8266

我知道,我的问题可能非常简单,但我已经三天都无法弄清楚这些东西了。

我需要通过ESP8266模块从我的Arduino nano向MQTT服务器发送一些请求。我找到了这个任务的好库 - PubSubClient.h。以下是如何执行此操作的示例:

#include <Ethernet.h>
#include <PubSubClient.h>

// Update these with values suitable for your network.
byte mac[]    = {  0xDE, 0xED, 0xBA, 0xFE, 0xFE, 0xED };
IPAddress ip(172, 16, 0, 100);
IPAddress server(172, 16, 0, 2);

void callback(char* topic, byte* payload, unsigned int length) {
  // handle message arrived
}

EthernetClient ethClient;
PubSubClient client(server, 1883, callback, ethClient);

但我不使用以太网屏蔽。我使用连接到数字端口的ESP8266并使用wifi创建SoftwareSerial端口来传输数据:

SoftwareSerial espSerial(8,7);

我不能同时使用SoftwareSerial端口和PubSubClient。 当我这样尝试时: PubSubClient客户端(服务器,1883,0,espSerial); 我收到错误:

no matching function for call to 'PubSubClient::PubSubClient(byte [4], int, int, SoftwareSerial&)'

我一直试图在互联网上找到解决方案,但我没有成功。请帮我解决这个问题。我应该做些什么? 我为我糟糕的英语道歉

2 个答案:

答案 0 :(得分:2)

pubsubclient不支持softwareSerial库。您可以使用WiFiEsp库在SoftwareSerial上使用ESP8266和PubSubClient库。

答案 1 :(得分:1)

虽然PubSubClient库列出了它支持的硬件website,但对ESP8266的引用意味着该库实际上在ESP8266上运行,而不是在通过串口连接到ESP8266的Arduino上运行。

正如@zipzit所提到的,你可以一起取消Arduino,只需使用ESP8266,具体取决于你拥有的版本,它可能有几乎与Arduino一样多的引脚。

否则您只需通过串行链路将主题和值发送到ESP8266,然后使用Lua和MQTT library固件中的内置NodeMCU发送MQTT消息。