-
-
Save Tolerant/2d1af4c99995c6c7e348b874b73ecbb8 to your computer and use it in GitHub Desktop.
/************************************************************** | |
* WebSocketClient SocketIO | |
* TinyGSM Getting Started guide: | |
* http://tiny.cc/tiny-gsm-readme | |
* | |
**************************************************************/ | |
// Select your modem: | |
#define TINY_GSM_MODEM_SIM800 | |
// #define TINY_GSM_MODEM_SIM808 | |
// #define TINY_GSM_MODEM_SIM900 | |
// #define TINY_GSM_MODEM_A6 | |
// #define TINY_GSM_MODEM_A7 | |
// #define TINY_GSM_MODEM_M590 | |
// #define TINY_GSM_MODEM_ESP8266 | |
// Increase RX buffer if needed | |
//#define TINY_GSM_RX_BUFFER 512 | |
#include <TinyGsmClient.h> | |
#include <WebSocketsClient.h> | |
#include <Hash.h> | |
WebSocketsClient webSocket; | |
#define MESSAGE_INTERVAL 30000 | |
#define HEARTBEAT_INTERVAL 25000 | |
uint64_t messageTimestamp = 0; | |
uint64_t heartbeatTimestamp = 0; | |
bool isConnected = false; | |
// Uncomment this if you want to see all AT commands | |
//#define DUMP_AT_COMMANDS | |
// Set serial for debug console (to the Serial Monitor, default speed 115200) | |
#define SerialMon Serial | |
// Use Hardware Serial on Mega, Leonardo, Micro | |
#define SerialAT Serial1 | |
// or Software Serial on Uno, Nano | |
//#include <SoftwareSerial.h> | |
//SoftwareSerial SerialAT(2, 3); // RX, TX | |
// Your GPRS credentials | |
// Leave empty, if missing user or pass | |
const char apn[] = "YourAPN"; | |
const char user[] = ""; | |
const char pass[] = ""; | |
// Server details | |
const char resource[] = "/TinyGSM/logo.txt"; | |
#ifdef DUMP_AT_COMMANDS | |
#include <StreamDebugger.h> | |
StreamDebugger debugger(SerialAT, SerialMon); | |
TinyGsm modem(debugger); | |
#else | |
TinyGsm modem(SerialAT); | |
#endif | |
TinyGsmClient client(modem); | |
int waitInternet() { | |
SerialMon.print(F("Waiting for network...")); | |
if (!modem.waitForNetwork()) { | |
SerialMon.println(" fail"); | |
delay(10000); | |
return 0; | |
} | |
SerialMon.println(" OK"); | |
SerialMon.print(F("Connecting to ")); | |
SerialMon.print(apn); | |
if (!modem.gprsConnect(apn, user, pass)) { | |
SerialMon.println(" fail"); | |
delay(10000); | |
return 0; | |
} | |
SerialMon.println(" OK"); | |
webSocket.beginSocketIO("192.168.0.123", 81); | |
//webSocket.setAuthorization("user", "Password"); // HTTP Basic Authorization | |
webSocket.onEvent(webSocketEvent); | |
return 1; | |
} | |
void setup() { | |
// Set console baud rate | |
SerialMon.begin(115200); | |
delay(10); | |
// Set GSM module baud rate | |
SerialAT.begin(115200); | |
delay(3000); | |
// Restart takes quite some time | |
// To skip it, call init() instead of restart() | |
SerialMon.println(F("Initializing modem...")); | |
modem.restart(); | |
String modemInfo = modem.getModemInfo(); | |
SerialMon.print(F("Modem: ")); | |
SerialMon.println(modemInfo); | |
// Unlock your SIM card with a PIN | |
//modem.simUnlock("1234"); | |
} | |
void loop() { | |
while(!waitInternet()) { | |
delay(100); | |
} | |
webSocket.loop(); | |
if(isConnected) { | |
uint64_t now = millis(); | |
if(now - messageTimestamp > MESSAGE_INTERVAL) { | |
messageTimestamp = now; | |
// example socket.io message with type "messageType" and JSON payload | |
webSocket.sendTXT("42[\"messageType\",{\"greeting\":\"hello\"}]"); | |
} | |
if((now - heartbeatTimestamp) > HEARTBEAT_INTERVAL) { | |
heartbeatTimestamp = now; | |
// socket.io heartbeat message | |
webSocket.sendTXT("2"); | |
} | |
} | |
} |
Just trying to figure out how this is working. Anyone tried it?
isConnected is defined as false and never becomes true.
client is defined as TinyGsmClient, but not used in code.
If this is with arduinoWebSockets,
webSocket.beginSocketIO by default goes to WiFi. How is the library changed to point to TinyGsm?
@shardul10 you got the working solution for this, websocket with Tinygsm
You are trying to connect to a websocket on a local LAN (192.168.0.123) over a WAN connection like GPRS?
Did anyone find a working solution for this ? I am trying to use sim800 with esp32 and connect to a server over websocket .
Hi dear friend, could you please help me, I try your code but the esp when goes to the websocket.loop it restarts
Hello bhai have you find any solution for thia
00:00:00.001 HDW: ESP8266EX
00:00:00.033 CFG: Loaded from flash at FA, Count 308
00:00:00.036 FRC: Some settings have been reset (2)
00:00:00.044 Project Tasmota - Tasmota Version 14.2.0.4(tasmota)-2_7_7(2024-12-09T18:36:38)
00:00:05.663 PRO: Initializing modem...(Success)
00:00:44.392 PRO: Modem Info: ATI SIM800 R14.18
00:00:44.393 PRO: Overriding TCP KeepAlive to 120 secs
00:00:44.451 PRO: Waiting GSM network...
00:01:15.973 PRO: Success
00:01:15.973 PRO: SinricPro init
00:01:15.974 [SinricPro:add()]: Adding device with id "671d27268fce4464af0614a6".
00:01:15.975 PRO: SinricPro init is done...
00:01:15.980 [SinricPro:stop()
00:01:15.981 [WS-Client] no client
00:01:15.985 PRO: GSMClient set
00:01:16.000 CMD: wifi 0
00:01:16.004 RSL: RESULT = {"Wifi":"OFF","Mode":"11n"}
00:01:16.018 PRO: Loop Starting...
00:01:16.068 [SinricPro:Websocket]: Conneth{�to WebSocket Server (ws.sinric.pro)
00:01:16.069�R�K��Aɽ:Websocket]: headers: appkey:9f685fce-b81d �
-ac54-6f61db51df1c
deviceids:671d27268fce4464aS+6
restoredevicestates:true
ip:(IP unset)
mac:34:94:54:8F:9A:24
platform:ESP8266
SDKVersion:3.2.0
00:01:16.084 [WS-Client] Websocket Version: 2.6.1
00:0:1r���[WS-Client] Connecting!
00:01:18.366 [WS-Client] connection to ws.sinric.pro:80 Failed
00:01:34.132 [WS-Client] Connecting!
00:01:34.314 [WS-Client] connection to ws.sinric.pro:80 Failed
00:01:34.316 MQT: Attempting connection...
00:01:34.403 MQT: Connecting to APN: internet
00:01:39.631 MQT: GPRS connected
00:01:42.208 MQT: Connected
00:01:42.365 MQT: tele/Tasmota_8F9A24/LWT = Online (retained)
00:06:03.615 PRO: Check GPRS...
00:06:04.344 PRO: GPRS connected
00:06:06.655 [WS-Client] Connecting!
00:06:07.403 WSJi�����u connected to ws.sinric.pro:80.
00:06:07.04 [WS-Client][sendHeader] sending header...
00:06:07.405 [write] n: 408 t: 367517
00:06:08.033 [WS-Client][snHead]sending header... Done (628021us).
00:06:09.425 [WS-Client][hadleeder] RX: HTTP/1.1 101 Switching Protocols
00:06:09.860 [WS-Client][hndlHader] RX: Server: nginx
00:06:10.087 [WS-Client][hadS��(ɲWRX: Sec-WebSocket-Accept: KQISzLXTM4I9dzbe"�a-go=
00:0:0��[YM-Client][handleHeader] RX: Sec-WebSocket-Protocol: arduino
00:06:10.189 [WS][0][headrDne] Header Handling Done.
00:06:10.193 [SinricPro�W%���U�W��������ѕ�5
00:06:10.197 PRO: SinricPro Connected
0�Ҋ�r����[WS][0][handleWebsocketWaitFor] siz: csXsize: 0
00:06:10.433 [readCb] n: 2 t: 37054
000151�WS][0][handleWebsocketWaitFor][readCb] size'��z:1
00:06:10.519 [WS][0][handleWebsocket] ----- rad massage frame -------
00:06:10.521 [WS][0][handleWebocket] fin: 1 rsv1: 0 rsv2: 0 rsv3 0 opCoe1
006:10.527 [WS][0][handleWebsocket] mask: 0 ayoaLn 24
00:06:10.533 [readCb] n: 24 t: 370645
0:06:10.536 [WS][0][handleWebsocket] text: {"timestp:1362423}
00:06:10.542 [SinricPro:Websocket]: ȕ��ٝdata
00:06:10.547 [SinricPro.handleReceiveQuue()]:1 message(s) in receiveQueue
00:06:10.554[nri,%.handleReceiveQueue()]: Signature is valid.�����ͥ�� message...
00:06:10.561 [SinricPro:extratTmesamp(): Got Timestamp 1733762423
00:06:20.328 MQT: Attempting connection...
00:06:21.059 MQT: GPRS connected
Tasmota Mqtt TinyGSM SIM800 Sinricpro websocket
#include <Hash.h> undefined