Now will publish some data from ESP8266 to thingspeak.com. Can be any kind of data, from
temperature, humidity, voltage you name it. As long as it has a value, can be published.
Add following lines after the include statements. (Can use the blinky code as skeleton).
#include "espconn.h"
LOCAL struct espconn *pCon = NULL;
LOCAL my_count = 0;
LOCAL your_value = 33;
Add the following code in the user_init() function.
const char ssid[32] = "my_home_ssid";
const char password[32] = "my_home_password";
struct station_config stationConf;
wifi_set_opmode( STATION_MODE );
os_memcpy(&stationConf.ssid, ssid, 32);
os_memcpy(&stationConf.password, password, 32);
wifi_station_set_config(&stationConf);
wifi_station_connect();
//connect to the previous pCon created structure
int ret = 0;
ret = espconn_connect(pCon);
if(ret == 0)
INFO("espconn_connect OK!\r\n");
else
{
//INFO("espconn_connect FAILED!\r\n");
char *fail;
os_sprintf(fail, "%d \r\n", ret);
//INFO(fail);
//clean up allocated memory
if(pCon->proto.tcp)
os_free(pCon->proto.tcp);
os_free(pCon);
pCon = NULL;
}
Add this code in a timer function like in this example:
pCon = (struct espconn *)os_zalloc(sizeof(struct espconn));
if (pCon == NULL)
{
os_printf("pCon ALLOCATION FAIL\r\n");
return;
}
pCon->type = ESPCONN_TCP;
pCon->state = ESPCONN_NONE;
pCon->proto.tcp = (esp_tcp *)os_zalloc(sizeof(esp_tcp));
pCon->proto.tcp->local_port = espconn_port();
//set up the server remote port
pCon->proto.tcp->remote_port = 80;
//set up the remote IP
uint32_t ip = ipaddr_addr("184.106.153.149"); //IP address for thingspeak.com
os_memcpy(pCon->proto.tcp->remote_ip, &ip, 4);
//set up the local IP
struct ip_info ipconfig;
wifi_get_ip_info(STATION_IF, &ipconfig);
os_memcpy(pCon->proto.tcp->local_ip, &ipconfig.ip, 4);
//register publish_thingspeak_connect_cb that will be called when the
//connection with the thingspeak is done. In this call back function
// will actualy do the data sending
espconn_regist_connectcb(pCon, publish_thingspeak_connect_cb);
where the callback function is:
static void ICACHE_FLASH_ATTR publish_thingspeak_connect_cb(void *arg)
{
//INFO("========>publish_thingspeak_connect_cb\r\n");
my_count++;
struct espconn *pespconn = (struct espconn *)arg;
char payload[128];
char field1[10];
char field2[10];
os_sprintf(field1, "%d", your_value);
os_sprintf(field2, "%d", my_count);
os_sprintf(payload, "GET /update? api_key=YOUR_THINGSPEAK_API_KEY&field1=%s&field2=%s\r\n", field1, field2);
espconn_sent(pespconn, payload, strlen(payload));
}
and need to be added before the user_main function.
Change my_count and your_value with your data.
Notes:
1. The time between to posts on thingspeak.com must be greater then 15 seconds.
2. Up to 8 fields can be used to post data on thingspeak.com
Hi There, would you be able to upload your codes please?
ReplyDelete