Now days microcontroller platform for IoT devices are becoming more and more powerful so much so that they can now sport an HTTPS stack and hence send telemetry to an HTTPS capable data broker like initialstate.com. Which means no need for any linux based gateway/hub - you can do away with your Raspberry Pi as a go between your microcontroller node and the internet.
You ask why would some one want to do that? Simple - lesser the number of components in your system, lesser the points of failure.
So, I wanted to explore if it was possible to use a Particle Photon to send data directly to initialstate.com and recently it just became possible when a few good folks ported an SSL library to Spark Photon.
![]() |
My Particle Photon with SHT11 |
Steps:
- Get a Particle Photon and connect it to SHT11. SHT11 is a digital temperature and humidity sensor. It works at 3.3V logic levels and can be powered by the photon itself. The photon will draw power from any nearby device (computer, smartphone charger or router) which has a spare USB port. Here are the connections:
Connection schematic - Install the Particle app on your android phone and use it to create an account for yourself and link your particle photon to your home WiFi network.
- Get an initialstate.com account and create a bucket. Make sure to note down the two API keys (Access key and Bucket Key)
Noting down your initialstate.com access keys - Now open https://build.particle.io and login with your particle account. Create a new App. add two libraries to it: HTTPSCLIENT-PARTICLE and SHT1X
- Write the following code into the .ino file that has been created by default. Make sure to modify the code so that it has your own initialstate.com access keys.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115#include "SHT1x/SHT1x.h"
#include "httpsclient-particle/httpsclient-particle.h"
//Initial State.com and HTTPS configuration START---------------->
#define INITIALSTATE_ACCESS_KEY "243434gdfsgt43f43rfwp3"
#define INITIALSTATE_BUCKET_KEY "GHDER34RF3NE"
constboolg_https_trace=false;// This controls debug info print to Serial
constcharhost[]="groker.initialstate.com";
//const char ad_endpoint [] = "/api/events";
constcharse_endpoint[]="/api/events";
constintg_port=443;// Don't change this, unless you know what you are doing
staticunsignedintfreemem;
boolg_https_complete;
uint32g_bytes_received;
TCPClientclient;
// Replace XXXX...XXX with base64 encoding if your gf username:password
// If you don't know how to generate the base64 encoding go here:
// http://www.tuxgraphics.org/toolbox/base64-javascript.html
// CAUTION: Do NOT remove/replace the word Basic from the string above,
// it's part of http standard.
unsignedcharhttpRequestContent[]="POST %s HTTP/1.0\r\n"
// "User-Agent: curl/7.38.0 \r\n"
"User-Agent: MatrixSSL/"MATRIXSSL_VERSION"\r\n"
"Host: groker.initialstate.com\r\n"
"Accept: */*\r\n"
"Content-Type: application/json\r\n"
"X-IS-AccessKey: "INITIALSTATE_ACCESS_KEY"\r\n"
"X-IS-BucketKey: "INITIALSTATE_BUCKET_KEY"\r\n"
"Accept-Version: 0.0.4\r\n"
"Content-Length: %d\r\n\r\n%s";
//<----------------Initial State.com and HTTPS configuration END
//SHT11 Temperature and Humidity Sensor START---------------->
// Channel 1 is Temperature (deg C)
// Channel 2 is Humidity (%)
#define dataPin D0
#define clockPin D1
SHT1xsht1x(dataPin,clockPin);
//<----------------SHT11 Temperature and Humidity Sensor END
voidsetup(){
if(g_https_trace){
Serial.begin(9600);
}
httpsclientSetup(host,se_endpoint);
}
unsignedintnextTime=0;// Next time to contact the server
intg_connected;
charjsonBufARR[300]={0};
voidloop(){
StringjsonBuf;
unsignedintt=millis();
if(nextTime>t)return;
floattemperature=sht1x.readTemperatureC();
floathumidity=sht1x.readHumidity();
jsonBuf="[";
jsonBuf+="{";
jsonBuf+="\"key\": \"Inside_Temperature\",";
StringTemperature_C(temperature,4);
jsonBuf+="\"value\": \""+Temperature_C+"\"";
jsonBuf+=" },";
jsonBuf+=" {";
jsonBuf+="\"key\": \"Inside_Humidity\",";
StringHumidity_Percent(humidity,4);
jsonBuf+="\"value\": \""+Humidity_Percent+"\"";
jsonBuf+=" }";
jsonBuf+="]";
jsonBuf.toCharArray(jsonBufARR,300);
g_connected=client.connect(host,g_port);
if(!g_connected){
client.stop();
// If TCP Client can't connect to host, exit here.
return;
}
g_https_complete=false;
g_bytes_received=0;
intrc;
httpsclientSetPath(se_endpoint);
if((rc=httpsClientConnection(httpRequestContent,jsonBuf.length(),jsonBufARR))<0){
// Failure
if(g_https_trace){
Serial.print("httpsClientConnection Returned:\n");
Serial.println(rc);
}
httpsclientCleanUp();
return;
}else{
if(g_https_trace){
Serial.println("HTTPS Transaction Successful");
}
}
client.stop();
if(g_https_trace){
Serial.println("<<<<----------------------------------------New HTTPS Transaction ENDS\n\n");
}
nextTime=millis()+40000;
}This is how your Web IDE should look like.
Note the place where you need to add your own initialstate.com Access keys. - Download the firmware (using the Web IDE - over the air) into your photon and wait for a few seconds then open your initialstate.com tiles view, you note the data being uploaded every 40 seconds.
![]() |
My Particle Photon and SHT11 is installed inside my house. This is the lines app view showing temperature and humidity data graphed over the past two month |
Notes:
- For background on how hubs are used to do HTTPS/TLS, read Your Very Own Raspberry Pi Smart Home Hub
- Webhooks when used with your Particle devices can bypass the use of Raspberry Pi kinda gateway/hub as well - AND THAT WOULD DEFINITELY BE A BETTER WAY to send data to initialstate.com than the one I have specified above because of one main reason - HTTPS stack uses up precious code space on your particle microcontroller which is not ideal, you need that re
- Arduino Yun has a microcontroller and a microprocessor (running Linux) on it. You can use that to send DHT11 readings to initialstate.com as well.
- I tested the above code on Particle Cores - The web IDE threw compilation errors. In case of Particle Core, you can use webhooks like so.
- Forum post regarding matrixSSL ported to Particle Photon by glowfi.sh team is here
- Github repository for https library for Particle Photon is here.