【问题标题】:MQTT Websocket Arduino Uno with SIM7600MQTT Websocket Arduino Uno 与 SIM7600
【发布时间】:2021-04-23 09:48:31
【问题描述】:

我创建了一个程序来将 Arduino Uno 连接到 MQTT 代理。 使用您在下面看到的代码,我可以连接到代理,为了进行测试,我将 HiveMQ 与普通 TCP 连接一起使用,一切都或多或少顺利。 但是对于最终代理,我将使用 Websockets Secure (wss),但我找不到如何做到这一点。

我读到“我应该用 websocket 包装客户端”,就像 here 一样,问题是我找到的所有库都使用 WiFiClientSecure.h

你知道有什么办法吗?任何使用 GSM 板通过 websocket 连接到 MQTT 的库或示例?

//DEFINITION

#define TINY_GSM_MODEM_SIM7600 //have to be before the include
#define Terminal Serial
#define SIM7600RX_PIN 2
#define SIM7600TX_PIN 3
#define SIM7600PWR_PIN 5

//GPRS credentials
const char apn[] = "";
const char gprsUser[] = "";
const char gprsPass[] = "";

//MQTT
const char* broker = "broker.hivemq.com";
const char* topic = "/testPablo/init";
const char* topiclstWill = "/testPablo/last";
const int mqttPort = 1883;
uint32_t lastReconnectAttempt = 0; 

//INCLUDE LIBRARIES
#include <SoftwareSerial.h>
#include <TinyGsmClient.h>
#include <PubSubClient.h>

//VARIABLE
SoftwareSerial SIM7600(SIM7600RX_PIN, SIM7600TX_PIN);
TinyGsm modem(SIM7600);
TinyGsmClient client(modem);
PubSubClient mqtt(client);

//Function
void activateSIM7600(){
  Terminal.println("Starting 4G Module...");
  pinMode(SIM7600PWR_PIN, OUTPUT);
  digitalWrite(SIM7600PWR_PIN,HIGH);
  delay(15000); //wait SIM7600 to start
  Terminal.println("wait...");
}

bool connectNetwork(){
  Terminal.print("Connecting to network...");
  modem.gprsConnect(apn, gprsUser, gprsPass);
  
  Terminal.print("Waiting for network...");
  if (!modem.waitForNetwork()) {
    Terminal.println(" fail");
    delay(5000);
    return false; 
  }
  Terminal.println(" success");
  if (modem.isNetworkConnected()) {
    Terminal.println("Network connected");
  }  
}

void configureSIM7600(){
  SIM7600.begin(115200);
  modem.init();
  String modemInfo = modem.getModemInfo();
  Terminal.print("Modem Info: ");
  Terminal.println(modemInfo);
  connectNetwork();
}
void mqttCallback(char* topic, byte* payload, unsigned int len) {
  Terminal.print("Message arrived [");
}
void configureMQTT(){
  // MQTT Broker setup
  mqtt.setServer(broker, 1883);
  mqtt.setCallback(mqttCallback);
}
boolean mqttConnect() {
  Terminal.print("Connecting to ");
  Terminal.print(broker);

  // Connect to MQTT Broker
  boolean status = mqtt.connect("GsmClientTest");
  //authenticate MQTT:
  //boolean status = mqtt.connect("GsmClientName", "mqtt_user", "mqtt_pass");

  if (status == false) {
    Terminal.println(" fail");
    return false;
  }
  Terminal.println(" success");
  mqtt.publish(topic, "GsmClientTest started");
  //mqtt.subscribe(topicLed);
  return mqtt.connected();
}

void setup() {
  Terminal.begin(115200);
  delay(10);
  activateSIM7600();
  configureSIM7600();
  configureMQTT();
  Terminal.println("Finish configuration");
}

void loop() {
  if (!mqtt.connected()) {
    Terminal.println("=== MQTT NOT CONNECTED ===");
    uint32_t t = millis(); // Reconnect every 10 seconds
    if (t - lastReconnectAttempt > 10000L) {
      lastReconnectAttempt = t;
      if (mqttConnect()) {
        lastReconnectAttempt = 0;
      }
    }
    delay(100);
    return;
  }

  mqtt.loop();
}

【问题讨论】:

    标签: websocket arduino mqtt gsm


    【解决方案1】:

    您希望 Arduino 连接到代理,在大多数情况下,这是通过使用端口 1883 或 8883(安全)来完成的。

    如果您想连接到 Web 客户端(例如浏览器),则需要 WebSockets,并且在大多数情况下通过端口 8080、8081 等来完成。

    【讨论】:

    • 感谢您的回答,但没有,Mqtt 可以通过 websocket hivemq.com/blog/mqtt-essentials-special-mqtt-over-websockets 建立连接。我已经用 Go、Javascript 和其他语言为客户端制作了它。
    • 当然,mqtt over websockets 完全有,但它和你上面显示的项目和代码有什么关系呢?
    • 上面的代码是我的第一次尝试,所以我在没有 websocket 或任何安全性的情况下连接,我看到它有效,现在我想连接到已经使用 websocket 和 TLS 运行的代理。
    【解决方案2】:

    如果我了解您链接到的库的自述文件,您需要使用 TinyGsmClient 实例而不是 WifiClientSecure

    类似:

    TinyGsmClient client(modem);
    WebSocketClient250 wsClient(client, host, port);
    WebSocketStreamClient wsStreamClient(wsClient, path);
    PubSubClient mqtt(wsStreamClient);
    

    这应该适用于不安全的版本

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-12-05
      • 1970-01-01
      • 1970-01-01
      • 2015-08-17
      • 2013-10-22
      • 2013-06-05
      • 1970-01-01
      相关资源
      最近更新 更多