esp8266 non-os sdk 通过openapi获取设备数据
在某些环境,可能需要使用8266作为数据透传,获取其他设备数据或者使用设备数据进行联动,为此,我们可以使用机智云的openapi提供的获取设备数据接口,通过http请求得到设备数据。首先,我们定义设备的请求接口,appid和token
#define API_URL "http://api.gizwits.com/app/devices/did"
#define API_HOST "api.gizwits.com"
#define API_APP_ID "id"
#define API_USER_TOKEN "token"
接下来,我们实现http请求代码:
void ICACHE_FLASH_ATTR send_api_request(void *arg) {
struct espconn conn;
espconn_create(&conn);
// 设置服务器地址和端口
ip_addr_t ip;
espconn_gethostbyname(&conn, API_HOST, &ip, http_request_callback);
os_memcpy(conn.proto.tcp->remote_ip, &ip, sizeof(ip));
conn.proto.tcp->remote_port = 80;// HTTP默认端口
// 配置连接选项
conn.type = ESPCONN_TCP;
conn.proto.tcp->local_port = espconn_port();
conn.proto.tcp->local_ip = 0;
conn.proto.tcp->local_ip = 0;
conn.proto.tcp->local_ip = 0;
conn.proto.tcp->local_ip = 0;
// 连接HTTP服务器
espconn_connect(&conn);
// 构建HTTP请求头
char requestHeader;
os_sprintf(requestHeader, "GET %s HTTP/1.1\r\n"
"Host: %s\r\n"
"User-Agent: ESP8266\r\n"
"Connection: close\r\n"
"X-Gizwits-Application-Id: %s\r\n"
"X-Gizwits-User-token: %s\r\n"
"\r\n",
API_URL, API_HOST, API_APP_ID, API_USER_TOKEN);
// 发送HTTP请求头
espconn_send(&conn, (uint8_t *)requestHeader, os_strlen(requestHeader));
}
编写数据接收回调代码:
static void ICACHE_FLASH_ATTR http_request_callback(void *arg, char *data, unsigned short len) {
// 处理响应
if (data != NULL && len > 0) {
os_printf("Received data: %s\n", data);
} else {
os_printf("No data received or an error occurred.\n");
}
// 关闭连接
struct espconn *conn = (struct espconn *)arg;
espconn_disconnect(conn);
espconn_delete(conn);
}
接下来,我们使用一个10秒的定时器定时获取,当然只是作为演示,实际使用可以使用事件响应代替。
os_timer_t request_timer;
os_timer_disarm(&request_timer);
os_timer_setfn(&request_timer, (os_timer_func_t *)send_api_request, NULL);
os_timer_arm(&request_timer, 10000, 1);
编译烧录,看一下请求得到的数据:
可以看见,成功返回了数据
页:
[1]