Library for HTTPS Communication with Azure using SIMCOM Modules, such as SIM800, SIM900. SSL is required, update your module to the latest firmware.

Dependents:   SIMInterface

Revision:
0:3cf9be45a676
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/HTTPSConnection.cpp	Thu Aug 10 10:41:06 2017 +0000
@@ -0,0 +1,141 @@
+#define _DEBUG 1
+
+#if _DEBUG
+//Enable debug
+#define __DEBUG__
+#include <cstdio>
+#define DBG(x, ...) printf("[HTTPS : DBG] "x"\r\n", ##__VA_ARGS__);
+#define WARN(x, ...) printf("[HTTPS : WARN] "x"\r\n", ##__VA_ARGS__);
+#define ERR(x, ...) printf("[HTTPS : ERR] "x"\r\n", ##__VA_ARGS__);
+
+#else
+//Disable debug
+#define DBG(x, ...) 
+#define WARN(x, ...)
+#define ERR(x, ...) 
+#endif
+
+#include "HTTPSConnection.h"
+
+char* response;
+char *bearer;
+
+HTTPSConnection::HTTPSConnection(PinName tx, PinName rx, int baudrate) // ATSerial
+: sim800_HTTPS(tx, rx, baudrate)
+{
+    
+}
+
+
+// Function that initializes the SIM900 module with the proper network provider parameters
+void HTTPSConnection::HTTPS_initialization(const char* gprs_apn){
+    
+    // Check Communication with SIM900
+    response = sim800_HTTPS.sendCmdAndWaitForResp("ATE0\r\n", 100); 
+    //response = sim800_HTTPS_HTTPS.sendCmdAndWaitForResp("AT+CGMR=?\r\n", 2000);
+    //response = sim800_HTTPS_HTTPS.sendCmdAndWaitForResp("AT+CGMR\r\n", 2000);
+    DBG("%s", response);
+    
+    // Status of the network connection
+    DBG("AT+CREG?");
+    response = sim800_HTTPS.sendCmdAndWaitForResp("AT+CREG?\r\n", 100);
+    DBG("%s", response);
+    
+    DBG("AT+SAPBR=3,1, CONTYPE");
+    response = sim800_HTTPS.sendCmdAndWaitForResp("AT+SAPBR=3,1,\"CONTYPE\",\"GPRS\"\r\n", 2000);
+    DBG("%s", response);
+    
+    // Set Network Provider APN
+    // Freedompop
+    // response = sim800_HTTPS_HTTPS.sendCmdAndWaitForResp("AT+SAPBR=3,1,\"APN\",\"freedompop.foggmobile.com\"\r\n", "OK", 200);
+    // Vodafone ES
+    DBG("AT+SAPBR=3,1, APN");
+    char comm_apn[50]; sprintf(comm_apn,"AT+SAPBR=3,1,\"APN\",\"%s\"\r\n", gprs_apn);
+    response = sim800_HTTPS.sendCmdAndWaitForResp("AT+SAPBR=3,1,\"APN\",\"airtelwap.es\"\r\n", 500);
+    DBG("%s", response);
+    
+    // Open bearer
+    DBG("AT+SAPBR=1,1");
+    response = sim800_HTTPS.sendCmdAndWaitForResp("AT+SAPBR=1,1\r\n", 2000);
+    DBG("%s", response);
+    
+    
+    // Query bearer
+    DBG("AT+SAPBR=2,1");
+    response = sim800_HTTPS.sendCmdAndWaitForResp("AT+SAPBR=2,1\r\n",2000);
+    DBG("%s", response);
+    
+    // Enable HTTP functions
+    DBG("AT+HTTPINIT");
+    response = sim800_HTTPS.sendCmdAndWaitForResp("AT+HTTPINIT\r\n", 2000);
+    DBG("%s", response);
+    
+    // Does SSL functionality exist on our current firmware?
+    //DBG("AT+HTTPSSL=?");
+    //response = sim800_HTTPS.sendCmdAndWaitForResp("AT+HTTPSSL=?\r\n", 2000);
+    //DBG("%s", response);
+    
+    // Is SSL function enabled?
+    //DBG("AT+HTTPSSL?");
+    //response = sim800_HTTPS.sendCmdAndWaitForResp("AT+HTTPSSL?\r\n", 2000);
+    //DBG("%s", response);
+    
+    // Enable SSL functionality for HTTP
+    DBG("AT+HTTPSSL=1");
+    response = sim800_HTTPS.sendCmdAndWaitForResp("AT+HTTPSSL=1\r\n", 2000);
+    DBG("%s", response);
+
+}
+
+// Function to set our Azure account parameters
+void HTTPSConnection::HTTPS_setAzureParameters(const char* gprs_url, const char* gprs_sas, char* gprs_data){
+
+    // Set bearer profile identifier
+    DBG("AT+HTTPPARA=CID,1");
+    response = sim800_HTTPS.sendCmdAndWaitForResp("AT+HTTPPARA=\"CID\",1\r\n", 2000);
+    DBG("%s", response);
+    
+    // Set the URL and the Shared Access Signature
+    DBG("AT+HTTPPARA=URL");
+    char comm_url[200]; sprintf(comm_url,"AT+HTTPPARA=\"URL\",\"%s\"\r\n", gprs_url);
+    response = sim800_HTTPS.sendCmdAndWaitForResp(comm_url, 2000);
+    DBG("%s", response);
+    DBG("AT+HTTPPARA=USERDATA");
+    char comm_sas[200]; sprintf(comm_sas,"AT+HTTPPARA=\"USERDATA\",\"%s\"\r\n", gprs_sas);
+    response = sim800_HTTPS.sendCmdAndWaitForResp(comm_sas, 2000);
+    DBG("%s", response);
+    
+    // Set Content-Type field in the HTTP header
+    DBG("AT+HTTPPARA=CONTENT");
+    response = sim800_HTTPS.sendCmdAndWaitForResp("AT+HTTPPARA=\"CONTENT\",\"application/json\"\r\n", 2000);
+    DBG("%s", response);
+    
+    // Set Data length
+    DBG("AT+HTTPDATA");
+    char https_data[30]; sprintf(https_data,"AT+HTTPDATA=%d,20000\r\n", strlen(gprs_data));
+    sim800_HTTPS.sendCmdAndWaitForResp(https_data, 200);
+    
+    // Set the JSON String
+    char comm_data[1000]; sprintf(comm_data,"%s", gprs_data);
+    response = sim800_HTTPS.sendCmdAndWaitForResp(comm_data, 1000);
+    DBG("%s", response);
+
+}
+
+void HTTPSConnection::HTTPS_updateStringToSend(char* gprs_data){
+
+    // Set Data length
+    DBG("AT+HTTPDATA");
+    char https_data[30]; sprintf(https_data,"AT+HTTPDATA=%d,20000\r\n", strlen(gprs_data));
+    sim800_HTTPS.sendCmdAndWaitForResp(https_data, 200);
+    
+    // Set the JSON String
+    char comm_data[1000]; sprintf(comm_data,"%s", gprs_data);
+    response = sim800_HTTPS.sendCmdAndWaitForResp(comm_data, 1000);
+    DBG("%s", response);
+
+}
+
+char* HTTPSConnection::HTTPS_post(int timeout){ 
+    return sim800_HTTPS.sendCmdAndWaitForResp("AT+HTTPACTION=1\r\n", timeout);
+}
\ No newline at end of file