|
EnigmaIOT
0.9.8
Secure sensor and gateway platform based on ESP8266 and ESP32
|
Go to the documentation of this file.
11 #if !defined ESP8266 && !defined ESP32
12 #error Node only supports ESP8266 or ESP32 platform
18 #include <CayenneLPP.h>
21 #include <ESP8266WiFi.h>
22 #include <ESP8266HTTPClient.h>
23 #include <ESP8266httpUpdate.h>
24 #include <ESPAsyncTCP.h>
30 #include <driver/adc.h>
33 #include "soc/rtc_cntl_reg.h"
35 #include <ArduinoJson.h>
36 #include <Curve25519.h>
37 #include <ESPAsyncWebServer.h>
38 #include <ESPAsyncWiFiManager.h>
39 #include <DNSServer.h>
44 #define LED_BUILTIN 2 // ESP8266 boards normally have a LED in GPIO2
46 #define LED_BUILTIN 5 // ESP32 boards normally have a LED in GPIO2 or GPIO5
48 #endif // !LED_BUILTIN
50 #define BLUE_LED LED_BUILTIN
58 Serial.println (
"Connected");
62 Serial.printf (
"Unregistered. Reason: %d\n", reason);
69 bool broadcast =
false;
70 uint8_t _command = command;
75 _command = (_command & 0x7F);
79 Serial.printf (
"Data from %s --> %s\n", macstr,
printHexBuffer (buffer, length));
87 Serial.printf (
"%s Command %s\n", broadcast ?
"Broadcast" :
"Unicast", commandStr.c_str ());
89 Serial.printf (
"Encoding: 0x%02X\n", payloadEncoding);
92 DynamicJsonDocument doc (1000);
94 memcpy (tempBuffer, buffer, length);
96 switch (payloadEncoding) {
98 root = doc.createNestedArray ();
99 lpp.decode (tempBuffer, length, root);
100 serializeJsonPretty (doc, Serial);
103 deserializeMsgPack (doc, tempBuffer, length);
104 serializeJsonPretty (doc, Serial);
108 DEBUG_WARN (
"Payload encoding %d is not (yet) supported", payloadEncoding);
114 Serial.begin (115200); Serial.println (); Serial.println ();
119 WRITE_PERI_REG (RTC_CNTL_BROWN_OUT_REG, 0);
136 if (wifi_get_macaddr (STATION_IF, macAddress))
138 if ((esp_wifi_get_mac (WIFI_IF_STA, macAddress) == ESP_OK))
142 DEBUG_WARN (
"Node address set to %s",
mac2str (macAddress));
144 DEBUG_WARN (
"Node address error");
160 localtime_r (&local_time, &timeinfo);
163 Serial.printf (
"%02d/%02d/%04d %02d:%02d:%02d\n",
166 timeinfo.tm_year + 1900,
171 Serial.printf (
"Time not sync'ed\n");
182 static time_t lastSensorData;
183 static const time_t SENSOR_PERIOD = 10000;
184 if (millis () - lastSensorData > SENSOR_PERIOD) {
185 lastSensorData = millis ();
189 msg.addAnalogInput (0, (
float)(ESP.getVcc ()) / 1000);
190 Serial.printf (
"Vcc: %f\n", (
float)(ESP.getVcc ()) / 1000);
192 msg.addAnalogInput (0, (
float)(analogRead (ADC1_CHANNEL_0_GPIO_NUM) * 3.6 / 4096));
193 Serial.printf (
"Vcc: %f V\n", (
float)(analogRead (ADC1_CHANNEL_0_GPIO_NUM) * 3.6 / 4096));
195 msg.addTemperature (1, 20.34);
198 Serial.printf (
"Trying to send: %s\n",
printHexBuffer (msg.getBuffer (), msg.getSize ()));
201 Serial.println (
"---- Error sending data");
203 Serial.println (
"---- Data sent");
time_t unixtime()
Gets current time in seconds from 1970, if time is synchronized.
bool hasClockSync()
Checks if internal clock is synchronized to gateway.
void enableClockSync(bool clockSync=true)
Controls clock synchronization function.
static const size_t ENIGMAIOT_ADDR_LEN
Address size. Mac address = 6 bytes.
nodeMessageType
Message code definition.
static const uint8_t MAX_MESSAGE_LENGTH
Maximum payload size on ESP-NOW.
static const int MAX_DATA_PAYLOAD_SIZE
Maximun payload size for data packets.
void setResetPin(int pin)
Sets a pin to be used to reset configuration it it is connected to ground during startup.
void handle()
This method should be called periodically for instance inside loop() function. It is used for interna...
char * printHexBuffer(const uint8_t *buffer, uint16_t len)
Debug helper function that generates a string that represent a buffer hexadecimal values.
EnigmaIOTNodeClass EnigmaIOTNode
void enableBroadcast(bool broadcast=true)
Enables node broadcast mode. Node will request broadcast key to Gateway. When it is received node wil...
void connectEventHandler()
void onDisconnected(onDisconnected_t handler)
Defines a function callback that will be called everytime node is disconnected from gateway.
void processRxData(const uint8_t *mac, const uint8_t *buffer, uint8_t length, nodeMessageType_t command, nodePayloadEncoding_t payloadEncoding)
bool sendData(const uint8_t *data, size_t len, dataMessageType_t dataMsgType, bool encrypt=true, nodePayloadEncoding_t payloadEncoding=CAYENNELPP)
Initiades data transmission distinguissing if it is payload or control data.
void disconnectEventHandler(nodeInvalidateReason_t reason)
Library to build a node for EnigmaIoT system.
void onConnected(onConnected_t handler)
Defines a function callback that will be called everytime node is registered on gateway.
void begin(Comms_halClass *comm, uint8_t *gateway=NULL, uint8_t *networkKey=NULL, bool useCounter=true, bool sleepy=true)
Initalizes communication basic data and starts node registration.
void setLed(uint8_t led, time_t onTime=FLASH_LED_TIME)
Sets a LED to be flashed every time a message is transmitted.
Espnow_halClass Espnow_hal
Singleton instance of ESP-NOW class.
char * mac2str(const uint8_t *mac, char *extBuffer)
Debug helper function that generates a string that represent a MAC address.
bool setNodeAddress(uint8_t address[ENIGMAIOT_ADDR_LEN])
Set node address to be used in EnigmaIOT communication.
nodeInvalidateReason_t
Key invalidation reason definition.
ESP-NOW communication system abstraction layer. To be used on ESP8266 or ESP32 platforms.
void onDataRx(onNodeDataRx_t handler)
Defines a function callback that will be called on every downlink data message that is received from ...