ESP8266 - Implemented MQTT ping
This commit is contained in:
parent
9cbebb3c4e
commit
a56f0122d6
2 changed files with 34 additions and 1 deletions
|
@ -582,6 +582,38 @@ uint8_t ESP8266::MqttUnsubscribe(const char* topicFilter) {
|
||||||
return(ERR_RESPONSE_MALFORMED);
|
return(ERR_RESPONSE_MALFORMED);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
uint8_t ESP8266::MqttPing() {
|
||||||
|
// build the PINGREQ packet
|
||||||
|
uint8_t packet[2];
|
||||||
|
|
||||||
|
// fixed header
|
||||||
|
packet[0] = (MQTT_PINGREQ << 4) | 0b0000;
|
||||||
|
packet[1] = 0x00;
|
||||||
|
|
||||||
|
// send MQTT packet
|
||||||
|
uint8_t state = send(packet, 2);
|
||||||
|
if(state != ERR_NONE) {
|
||||||
|
return(state);
|
||||||
|
}
|
||||||
|
|
||||||
|
// get the response length (MQTT PINGRESP response has to be 2 bytes long)
|
||||||
|
uint16_t numBytes = getNumBytes();
|
||||||
|
if(numBytes != 2) {
|
||||||
|
return(ERR_RESPONSE_MALFORMED_AT);
|
||||||
|
}
|
||||||
|
|
||||||
|
// read the response
|
||||||
|
uint8_t* response = new uint8_t[numBytes];
|
||||||
|
receive(response, numBytes);
|
||||||
|
if((response[0] == MQTT_PINGRESP << 4) && (response[1] == 0)) {
|
||||||
|
delete[] response;
|
||||||
|
return(ERR_NONE);
|
||||||
|
}
|
||||||
|
|
||||||
|
delete[] response;
|
||||||
|
return(ERR_RESPONSE_MALFORMED);
|
||||||
|
}
|
||||||
|
|
||||||
uint8_t ESP8266::send(const char* data) {
|
uint8_t ESP8266::send(const char* data) {
|
||||||
// build AT command
|
// build AT command
|
||||||
char lenStr[8];
|
char lenStr[8];
|
||||||
|
|
|
@ -48,6 +48,7 @@ class ESP8266 {
|
||||||
uint8_t MqttPublish(const char* topic, const char* message);
|
uint8_t MqttPublish(const char* topic, const char* message);
|
||||||
uint8_t MqttSubscribe(const char* topicFilter);
|
uint8_t MqttSubscribe(const char* topicFilter);
|
||||||
uint8_t MqttUnsubscribe(const char* topicFilter);
|
uint8_t MqttUnsubscribe(const char* topicFilter);
|
||||||
|
uint8_t MqttPing();
|
||||||
|
|
||||||
// Transport layer methods
|
// Transport layer methods
|
||||||
uint8_t openTransportConnection(const char* host, const char* protocol, uint16_t port, uint16_t tcpKeepAlive = 0);
|
uint8_t openTransportConnection(const char* host, const char* protocol, uint16_t port, uint16_t tcpKeepAlive = 0);
|
||||||
|
@ -64,7 +65,7 @@ class ESP8266 {
|
||||||
size_t MqttEncodeLength(uint32_t len, uint8_t* encoded);
|
size_t MqttEncodeLength(uint32_t len, uint8_t* encoded);
|
||||||
uint32_t MqttDecodeLength(uint8_t* encoded);
|
uint32_t MqttDecodeLength(uint8_t* encoded);
|
||||||
|
|
||||||
uint16_t getNumBytes(uint32_t timeout = 10000);
|
uint16_t getNumBytes(uint32_t timeout = 10000, size_t minBytes = 10);
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Add table
Reference in a new issue