Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
带有SIM7600的MQTT Websocket Arduino Uno_Websocket_Arduino_Mqtt_Gsm - Fatal编程技术网

带有SIM7600的MQTT Websocket Arduino Uno

带有SIM7600的MQTT Websocket Arduino Uno,websocket,arduino,mqtt,gsm,Websocket,Arduino,Mqtt,Gsm,我创建了一个将Arduino Uno连接到MQTT代理的程序。 通过下面可以看到的代码,我可以连接到代理,为了进行测试,我使用带有普通TCP连接的HiveMQ,一切都或多或少顺利。 但是对于最后一个代理,我将使用Websockets安全(wss),我找不到如何做到这一点 我读到“我应该用websocket包装客户端”,就像是made一样,问题是我找到的所有库都使用WiFiClientSecure.h 你知道怎么做吗?有使用GSM板使用websocket连接到MQTT的库或示例吗 //DEFINI

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

我读到“我应该用websocket包装客户端”,就像是made一样,问题是我找到的所有库都使用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();
}
//定义
#定义微型\u GSM\u调制解调器\u SIM7600//必须在包含之前
#定义终端序列号
#定义SIM7600RX_引脚2
#定义SIM7600TX_引脚3
#定义SIM7600PWR_引脚5
//GPRS凭据
常量字符apn[]=“”;
常量字符gprsUser[]=“”;
常量字符gprsPass[]=“”;
//MQTT
const char*broker=“broker.hivemq.com”;
const char*topic=“/testPablo/init”;
const char*topiclstWill=“/testPablo/last”;
常量int mqttPort=1883;
uint32\u t LastReconnectEntry=0;
//包括图书馆
#包括
#包括
#包括
//变数
软件系列SIM7600(SIM7600RX_引脚、SIM7600TX_引脚);
TinyGsm调制解调器(SIM7600);
TinyGSClient客户端(调制解调器);
PubSubClient mqtt(客户);
//作用
无效激活ESIM7600(){
println(“启动4G模块…”);
引脚模式(SIM7600PWR_引脚,输出);
数字写入(SIM7600PWR_引脚,高);
延迟(15000);//等待SIM7600启动
Terminal.println(“等待…”);
}
布尔连接网络(){
终端打印(“连接到网络…”);
调制解调器.gprsConnect(apn、gprsUser、gprsPass);
终端打印(“等待网络…”);
如果(!modem.waitForNetwork()){
终端。println(“失败”);
延迟(5000);
返回false;
}
Terminal.println(“成功”);
if(modem.isNetworkConnected()){
终端.println(“网络连接”);
}  
}
无效配置SIM7600(){
SIM7600.begin(115200);
modem.init();
字符串modemInfo=modem.getModemInfo();
终端打印(“调制解调器信息:”);
终端.println(modemInfo);
连接网络();
}
void mqttCallback(字符*主题,字节*有效负载,无符号整数len){
终端打印(“消息到达[”);
}
void configureMQTT(){
//MQTT代理设置
mqtt.setServer(broker,1883);
setCallback(mqttCallback);
}
布尔mqttConnect(){
终端打印(“连接到”);
终端打印(代理);
//连接到MQTT代理
布尔状态=mqtt.connect(“gsmclientset”);
//验证MQTT:
//布尔状态=mqtt.connect(“GsmClientName”、“mqtt_用户”、“mqtt_传递”);
如果(状态==false){
终端。println(“失败”);
返回false;
}
Terminal.println(“成功”);
publish(主题“gsmclientset已启动”);
//mqtt.subscribe(topicLed);
返回mqtt.connected();
}
无效设置(){
终端。开始(115200);
延迟(10);
激活ESIM7600();
配置sim7600();
configureMQTT();
Terminal.println(“完成配置”);
}
void循环(){
如果(!mqtt.connected()){
Terminal.println(“==MQTT未连接==”);
uint32_t t=millis();//每10秒重新连接一次
如果(t-上次重新连接尝试>10000L){
最后重新连接尝试=t;
if(mqttConnect()){
LastReconnectEntry=0;
}
}
延迟(100);
返回;
}
mqtt.loop();
}

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


如果您想连接到web客户端(如浏览器),则需要WebSocket,并且在大多数情况下都是通过端口8080、8081或类似端口来完成的。

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

比如:

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

这应该适用于非安全版本

谢谢您的回答,但不,Mqtt可以通过websocket建立连接。我已经用Go、Javascript和其他语言为客户端建立了连接。当然,websocket上的Mqtt完全存在,但它与上面显示的项目和代码有什么关系?上面的代码是我的第一次尝试,所以我连接时没有使用websocket或任何安全性,我看到它工作了,现在我想连接到一个已经使用websocket和TLS运行的代理。