K-Type sensor readings in cloud with Arduino + ESP8266 [IoT]
The last few nights I am playing with an Esp8266 module that I had laying around for months and never connected it to my local wifi. Its one of the first modules, the ESP-01. The plan was to connect it to an Arduino mini pro or Arduino nano which has a K-Type temperature sensor attached to it. Then the readings of this sensor would be passed to ESP8266 through the serial pins (RX/TX) and send them to Thingspeak.com.
Actually it took me a while because I had to battle with different voltages (Esp8266 needs 3.3v NOT 5v) and due to the lack of ftdi chip in arduino mini pro. But finally I succeeded and here is the code and the result.
#include <SPI.h> #include <Adafruit_MAX31855.h> #include<stdlib.h> #define SSID "YOUR SSID"//your network name #define PASS "YOUR PASSWORD"//your network password #define IP "184.106.153.149" // thingspeak.com #define Baud_Rate 115200 //Another common value is 9600 #define DELAY_TIME 10000 //time in ms between posting data to ThingSpeak int thermoCLK = 11; int thermoCS = 12; int thermoDO = 13; Adafruit_MAX31855 thermocouple(thermoCLK, thermoCS, thermoDO); String GET = "GET /update?key=YOUR_KEY&field1="; bool updated; void setup() { Serial.begin(Baud_Rate); Serial.println("AT"); delay(5000); if(Serial.find("OK")){ //connect to your wifi netowork bool connected = connectWiFi(); if(!connected){ Serial.println("failure, not connected"); } }else{ Serial.println("failure, need to check your values and try again"); } } void loop() { double c = thermocouple.readCelsius(); if (isnan(c)) { Serial.print("T/C Problem"); } else { Serial.print(c); updated = updateTemp(String(c)); } delay(DELAY_TIME); } bool updateTemp(String temp){ //initialize your AT command string String cmd = "AT+CIPSTART=\"TCP\",\""; //add IP address and port cmd += IP; cmd += "\",80"; //connect Serial.println(cmd); delay(2000); if(Serial.find("Error")){ return false; } //build GET command, ThingSpeak takes Post or Get commands for updates, I use a Get cmd = GET; cmd += temp; cmd += "\r\n"; //Use AT commands to send data Serial.print("AT+CIPSEND="); Serial.println(cmd.length()); if(Serial.find(">")){ //send through command to update values Serial.print(cmd); }else{ Serial.println("AT+CIPCLOSE"); } if(Serial.find("OK")){ //success! Your most recent values should be online. return true; }else{ return false; } } boolean connectWiFi(){ //set ESP8266 mode with AT commands Serial.println("AT+CWMODE=1"); delay(2000); //build connection command String cmd="AT+CWJAP=\""; cmd+=SSID; cmd+="\",\""; cmd+=PASS; cmd+="\""; //connect to WiFi network and wait 5 seconds Serial.println(cmd); delay(5000); //if connected return true, else false if(Serial.find("OK")){ return true; }else{ return false; } }
You can check my github repository for more. You will also find there an example with a TMP36 temperature sensor.
3 thoughts on “K-Type sensor readings in cloud with Arduino + ESP8266 [IoT]”