A Telegram BOT for this awesome all-in-one board.

Dependencies:   BSP_B-L475E-IOT01 mbed es_wifi jsmn

Telegram Bot for DISCO_L475VG_IOT01

This application embeds aTelegram chatbot into the DISCO_L475VG_IOT01 board.

The Bot answers to the users queries about:

  • Real time environmental data taken from the on board sensors.
  • Environmental data history of the latest 24 hours stored on board.
  • Camera images taken from the Arducam-mini-2mp (optional).

This software uses:

Compilation

Import in your compiler and modify the following defines:

  • WIFI_SSID
  • WIFI_PASSWORD
  • TELEGRAM_BOT_APIKEY

Please follow the Telegram bots documentation (https://core.telegram.org/bots) to better understand how the Telegram API works and how to create your bot.

In order to support the Arducam-Mini-2MP set WITH_ARDUCAM_2640 #define to 1.

Screenshots

/media/uploads/dvddnr/screenshot_20180130-073732.png /media/uploads/dvddnr/screenshot_20180130-073703.png /media/uploads/dvddnr/arducam.jpeg /media/uploads/dvddnr/screenshot_20180216-102601.png

Security

The Inventek wifi module creates the ssl connection but does not authenticate the server's certificate ( AT cmd P9=0 ).

For more details http://www.inventeksys.com/IWIN/programming-certificates-tcp-ssltls/

Committer:
dvddnr
Date:
Fri Feb 16 09:17:47 2018 +0000
Revision:
10:28cf58359411
Parent:
8:89fe332bc412
WITH_ARDUCAM_2640 default value to 0

Who changed what in which revision?

UserRevisionLine numberNew contents of line
dvddnr 8:89fe332bc412 1 #pragma once
dvddnr 8:89fe332bc412 2
dvddnr 8:89fe332bc412 3 #include <mbed.h>
dvddnr 8:89fe332bc412 4 #include "es_wifi.h"
dvddnr 8:89fe332bc412 5
dvddnr 8:89fe332bc412 6
dvddnr 8:89fe332bc412 7 #define WIFI_WRITE_TIMEOUT 3000
dvddnr 8:89fe332bc412 8 #define WIFI_READ_TIMEOUT 25000
dvddnr 8:89fe332bc412 9
dvddnr 8:89fe332bc412 10 class TCPConnector
dvddnr 8:89fe332bc412 11 {
dvddnr 8:89fe332bc412 12 private:
dvddnr 8:89fe332bc412 13 ES_WIFIObject_t m_es_wifi_ctx;
dvddnr 8:89fe332bc412 14
dvddnr 8:89fe332bc412 15 public:
dvddnr 8:89fe332bc412 16
dvddnr 8:89fe332bc412 17 TCPConnector() {}
dvddnr 8:89fe332bc412 18 ~TCPConnector(){}
dvddnr 8:89fe332bc412 19
dvddnr 8:89fe332bc412 20 bool wifi_connect(char *wifi_ssid, char* wifi_wpa_password, uint32_t max_attempts)
dvddnr 8:89fe332bc412 21 {
dvddnr 8:89fe332bc412 22
dvddnr 8:89fe332bc412 23 /* HW setup */
dvddnr 8:89fe332bc412 24 if (ES_WIFI_RegisterBusIO(&m_es_wifi_ctx,
dvddnr 8:89fe332bc412 25 SPI_WIFI_Init,
dvddnr 8:89fe332bc412 26 SPI_WIFI_DeInit,
dvddnr 8:89fe332bc412 27 SPI_WIFI_Delay,
dvddnr 8:89fe332bc412 28 SPI_WIFI_SendData,
dvddnr 8:89fe332bc412 29 SPI_WIFI_ReceiveData) != ES_WIFI_STATUS_OK)
dvddnr 8:89fe332bc412 30 return false;
dvddnr 8:89fe332bc412 31
dvddnr 8:89fe332bc412 32 if (ES_WIFI_Init(&m_es_wifi_ctx) != ES_WIFI_STATUS_OK)
dvddnr 8:89fe332bc412 33 return false;
dvddnr 8:89fe332bc412 34 ES_WIFI_ResetToFactoryDefault(&m_es_wifi_ctx);
dvddnr 8:89fe332bc412 35
dvddnr 8:89fe332bc412 36 /* JOIN AP */
dvddnr 8:89fe332bc412 37 for (int i = 0; i < max_attempts; i++)
dvddnr 8:89fe332bc412 38 {
dvddnr 8:89fe332bc412 39 if (ES_WIFI_Connect(&m_es_wifi_ctx, wifi_ssid, wifi_wpa_password, ES_WIFI_SEC_WPA_WPA2) == ES_WIFI_STATUS_OK)
dvddnr 8:89fe332bc412 40 {
dvddnr 8:89fe332bc412 41 return (ES_WIFI_GetNetworkSettings(&m_es_wifi_ctx) == ES_WIFI_STATUS_OK);
dvddnr 8:89fe332bc412 42 }
dvddnr 8:89fe332bc412 43 wait_ms(1000);
dvddnr 8:89fe332bc412 44 }
dvddnr 8:89fe332bc412 45
dvddnr 8:89fe332bc412 46 return false;
dvddnr 8:89fe332bc412 47 }
dvddnr 8:89fe332bc412 48
dvddnr 8:89fe332bc412 49
dvddnr 8:89fe332bc412 50 bool tcp_connect(uint8_t socket, char *domain_name, uint16_t remote_port, bool secure,uint32_t max_attempts)
dvddnr 8:89fe332bc412 51 {
dvddnr 8:89fe332bc412 52 ES_WIFI_Conn_t conn;
dvddnr 8:89fe332bc412 53 ES_WIFI_Status_t res;
dvddnr 8:89fe332bc412 54
dvddnr 8:89fe332bc412 55 conn.Number = socket;
dvddnr 8:89fe332bc412 56 conn.RemotePort = remote_port;
dvddnr 8:89fe332bc412 57 conn.LocalPort = 0;
dvddnr 8:89fe332bc412 58 conn.Type = (secure)?ES_WIFI_TCP_SSL_CONNECTION:ES_WIFI_TCP_CONNECTION;
dvddnr 8:89fe332bc412 59 strncpy((char *)conn.RemoteHost, domain_name, sizeof(conn.RemoteHost));
dvddnr 8:89fe332bc412 60 for(int i=0;i<max_attempts;i++)
dvddnr 8:89fe332bc412 61 {
dvddnr 8:89fe332bc412 62 res = ES_WIFI_ConnectToRemoteHost(&m_es_wifi_ctx, &conn);
dvddnr 8:89fe332bc412 63 if(res == ES_WIFI_STATUS_OK) return true;
dvddnr 8:89fe332bc412 64 }
dvddnr 8:89fe332bc412 65 return false;
dvddnr 8:89fe332bc412 66 }
dvddnr 8:89fe332bc412 67
dvddnr 8:89fe332bc412 68
dvddnr 8:89fe332bc412 69 bool tcp_close(uint32_t socket)
dvddnr 8:89fe332bc412 70 {
dvddnr 8:89fe332bc412 71 ES_WIFI_Conn_t conn;
dvddnr 8:89fe332bc412 72 conn.Number = socket;
dvddnr 8:89fe332bc412 73
dvddnr 8:89fe332bc412 74 return (ES_WIFI_StopClientConnection(&m_es_wifi_ctx, &conn)== ES_WIFI_STATUS_OK);
dvddnr 8:89fe332bc412 75 }
dvddnr 8:89fe332bc412 76
dvddnr 8:89fe332bc412 77
dvddnr 8:89fe332bc412 78 bool tcp_write(uint8_t socket, char *data, uint32_t data_len)
dvddnr 8:89fe332bc412 79 {
dvddnr 8:89fe332bc412 80 uint16_t ack;
dvddnr 8:89fe332bc412 81 uint16_t chunk_size;
dvddnr 8:89fe332bc412 82 ES_WIFI_Status_t res;
dvddnr 8:89fe332bc412 83
dvddnr 8:89fe332bc412 84 for(int i=0;i<data_len;i+=ES_WIFI_PAYLOAD_SIZE)
dvddnr 8:89fe332bc412 85 {
dvddnr 8:89fe332bc412 86 chunk_size = ((data_len-i)<ES_WIFI_PAYLOAD_SIZE)?(data_len-i):ES_WIFI_PAYLOAD_SIZE;
dvddnr 8:89fe332bc412 87 res = ES_WIFI_SendData(&m_es_wifi_ctx, socket, (uint8_t*)data+i, chunk_size, &ack, WIFI_WRITE_TIMEOUT);
dvddnr 8:89fe332bc412 88 if( res != ES_WIFI_STATUS_OK || chunk_size != ack ) return false;
dvddnr 8:89fe332bc412 89 }
dvddnr 8:89fe332bc412 90 return true;
dvddnr 8:89fe332bc412 91 }
dvddnr 8:89fe332bc412 92
dvddnr 8:89fe332bc412 93
dvddnr 8:89fe332bc412 94 bool tcp_read(uint8_t socket, char *rx_buffer, uint16_t rx_buffer_len, uint16_t *received_bytes,bool continued)
dvddnr 8:89fe332bc412 95 {
dvddnr 8:89fe332bc412 96 bool rx = false;
dvddnr 8:89fe332bc412 97 *received_bytes = 0;
dvddnr 8:89fe332bc412 98
dvddnr 8:89fe332bc412 99 rx = (continued)?( ES_WIFI_ReceiveData2(&m_es_wifi_ctx, (uint8_t*)rx_buffer, rx_buffer_len, received_bytes) == ES_WIFI_STATUS_OK ):
dvddnr 8:89fe332bc412 100 ( ES_WIFI_ReceiveData(&m_es_wifi_ctx, socket, (uint8_t*)rx_buffer, rx_buffer_len, received_bytes, WIFI_READ_TIMEOUT) == ES_WIFI_STATUS_OK );
dvddnr 8:89fe332bc412 101
dvddnr 8:89fe332bc412 102 return rx;
dvddnr 8:89fe332bc412 103 }
dvddnr 8:89fe332bc412 104
dvddnr 8:89fe332bc412 105
dvddnr 8:89fe332bc412 106
dvddnr 8:89fe332bc412 107
dvddnr 8:89fe332bc412 108
dvddnr 8:89fe332bc412 109 };