ESP8266浏览器发送数据到远程设备测试OK

本文介绍如何使用ESP8266模块配合乐鑫云端实现远程控制的应用案例,包括硬件连接、固件烧录、云端配置及HTTP交互等步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

数据模型:

手机或电脑浏览器<======>厂家乐鑫云端<======>用户路由器<======>用户esp8266模块<======>串口

用到的硬件:https://detail.tmall.com/item.htm?id=520327020054&spm=a1z09.2.0.0.0PMKGa&_u=b3jva391c93

开发工具:phpstudy,esp8266编程工具v4.5(需注册,直接使用固件就不用了)

1.自己写固件程序 烧录进去

esp8266烧录插上就行
先用一键烧录工具试


2.在云端https://iot.espressif.cn配置

参考:https://iot.espressif.cn/#/help/ioc-switch-demo-zh-cn/
公开
一维数据

数据模型名称为plug-status  ,测试数据对应如下 
查询状态
curl -X GET -H "Content-Type:application/json" -H "Authorization: token d426e199d39ea63dc713241488d3d0b579ca017f" https://iot.espressif.cn/v1/datastreams/plug-status/datapoint/
切换开关为1
curl  -H "Authorization: token 6bdc9da4134c862199005c672f32817d5173a68a" -d "{\"datapoint\":{\"x\":1}}" http://iot.espressif.cn/v1/datastreams/plug-status/datapoint/?deliver_to_device=true


3.http pos监听
发送
POST https://iot.espressif.cn/v1/datastreams/plug-status/datapoint/?deliver_to_device=true HTTP/1.1
Host: iot.espressif.cn
Connection: keep-alive
Content-Length: 21
Time-Zone: Asia/Shanghai
Origin: https://iot.espressif.cn
Language: zh-cn
Authorization: token 4faa67aa888e01f065d95f791a2b12ca58b6c4af
Content-Type: application/json;charset=UTF-8
Accept: application/json, text/plain, */*
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36
Referer: https://iot.espressif.cn/
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.8
Cookie: Authorization=token-7cb04556dda5ddc3bf0ebc01d716bc869727930f


{"datapoint":{"x":0}}


返回
HTTP/1.1 200 OK
Server: nginx/1.10.2
Date: Sun, 11 Jun 2017 11:12:11 GMT
Content-Type: application/json
Content-Length: 229
Connection: keep-alive


{"datapoint": {"id": 5295096, "created": "2017-06-11 19:12:11", "updated": "2017-06-11 19:12:11", "visibly": 1, "datastream_id": 12318, "datatype": 0, "at": "2017-06-11 19:12:11", "x": 0.00000}, "nonce": 28772519, "status": 200}




4.浏览器发送数据到远程设备测试
发送
GET https://iot.espressif.cn/v1/device/rpc/?deliver_to_device=true&action=1122 HTTP/1.1
Host: iot.espressif.cn
Connection: keep-alive
Accept: application/json, text/plain, */*
Language: zh-cn
Authorization: token 4faa67aa888e01f065d95f791a2b12ca58b6c4af
Time-Zone: Asia/Shanghai
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36
Referer: https://iot.espressif.cn/
Accept-Encoding: gzip, deflate, sdch
Accept-Language: zh-CN,zh;q=0.8
Cookie: Authorization=token-7cb04556dda5ddc3bf0ebc01d716bc869727930f


返回
HTTP/1.1 200 OK
Server: nginx/1.10.2
Date: Sun, 11 Jun 2017 11:22:56 GMT
Content-Type: application/json
Content-Length: 86
Connection: keep-alive


{"status": 200, "datapoint": {"x": 1}, "nonce": 250233347, "deliver_to_device": true}


5.ERROR:使用curl命令出错,说工具不支持https
curl -H "Authorization: token HERE_IS_THE_DEVICE_KEY" 'https://iot.espressif.cn/v1/device/rpc/?deliver_to_device=true&action=your_action'






6.php发送数据到设备测试成功
<?php
$header= array(                                                                                                                                             
    "Authorization: token 4faa67aa888e01f065d95f791a2b12ca58b6c4af",


    );
    //初始化
    $curl = curl_init();
 //   curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "POST");                                         
    //设置抓取的url
    curl_setopt($curl, CURLOPT_URL, 'http://iot.espressif.cn/v1/device/rpc/?deliver_to_device=true&action=1122');
    //设置头文件的信息作为数据流输出
    curl_setopt($curl, CURLOPT_HTTPHEADER, $header);
    //设置获取的信息以文件流的形式返回,而不是直接输出。
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
    //执行命令
    $data = curl_exec($curl);
    //关闭URL请求
    curl_close($curl);
    //显示获得的数据
  ///  print_r($data);
  
  $obj = json_decode($data);
//强制转化为数组格式
$arr = (array) $obj;
//按数组方式调用里面的数据
print_r($arr['status']);
echo '</br>';
print_r($arr['deliver_to_device']);
echo '</br>';
$arrin=(array)$arr['datapoint'];
print_r($arrin['x']);
echo '</br>';
//输出数组结构
print_r($arr);
?>

结果:成功





















### ESP8266远程控制实现方式 ESP8266可以通过Wi-Fi连接到互联网,从而实现对设备远程控制。通常情况下,这种控制可以基于Web服务器或者MQTT协议来完成。以下是两种常见的实现方式及其对应的示例代码。 #### 基于Web服务器的方式 在这种模式下,ESP8266会运行一个简单的HTTP Web服务器,允许用户通过浏览器发送请求来切换GPIO的状态,进而控制外部设备(如继电器或LED灯)。 ```cpp #include <ESP8266WiFi.h> const char* ssid = "your_SSID"; // 替换为您的Wi-Fi名称 const char* password = "your_PASSWORD"; // 替换为您的Wi-Fi密码 int ledPin = 2; // GPIO2 (D4 on NodeMCU) // 初始化Web服务器,默认端口80 WiFiServer server(80); void setup() { pinMode(ledPin, OUTPUT); digitalWrite(ledPin, LOW); Serial.begin(115200); WiFi.mode(WIFI_STA); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.println("Connecting to WiFi..."); } Serial.println(""); Serial.print("Connected to "); Serial.println(ssid); Serial.print("IP address: "); Serial.println(WiFi.localIP()); server.begin(); } void loop() { WiFiClient client = server.available(); if (!client) { return; } boolean currentLineIsBlank = true; while(client.connected()) { if (client.available()) { char c = client.read(); if (c == '\n' && currentLineIsBlank) { break; } if(c == '\n') { currentLineIsBlank = true; } else if(c != '\r') { currentLineIsBlank = false; } } } String request = client.readStringUntil('\r'); client.flush(); int value = LOW; if (request.indexOf("/ledon") != -1) { digitalWrite(ledPin, HIGH); value = HIGH; } else if (request.indexOf("/ledoff") != -1){ digitalWrite(ledPin, LOW); value = LOW; } client.println("HTTP/1.1 200 OK"); client.println("Content-Type: text/html"); client.println(""); client.println("<!DOCTYPE HTML>"); client.println("<html>"); client.print("Led is now "); if(value == HIGH) { client.print("on"); } else{ client.print("off"); } client.println("<br><br>"); client.println("Click <a href=\"/ledon\">here</a> turn ON the LED"); client.println("Click <a href=\"/ledoff\">here</a> turn OFF the LED"); client.println("</html>"); } ``` 上述代码展示了如何设置一个基本的Web服务器并响应来自客户端的GET请求[^1]。 #### 使用MQTT协议的方式 另一种更高效的方法是利用MQTT消息队列传输协议来进行通信。这种方式特别适合物联网应用中的订阅-发布模型。 首先,在Arduino IDE中安装PubSubClient库用于处理MQTT功能: ```bash Sketch -> Include Library -> Manage Libraries... -> Search for PubSubClient and install it. ``` 接着编写如下程序: ```cpp #include <ESP8266WiFi.h> #include <PubSubClient.h> #define MQTT_SERVER "broker.hivemq.com" #define WIFI_SSID "your_SSID" // Wi-Fi SSID #define WIFI_PASS "your_PASSWORD" // Wi-Fi Password WiFiClient espClient; PubSubClient client(espClient); void callback(char* topic, byte* payload, unsigned int length) { Serial.print("Message arrived ["); Serial.print(topic); Serial.print("] "); for(int i=0;i<length;i++) { Serial.print((char)payload[i]); } Serial.println(); if ((char)payload[0] == 'ON') { digitalWrite(LED_BUILTIN, HIGH); } else if ((char)payload[0] == 'OFF'){ digitalWrite(LED_BUILTIN, LOW); } } void reconnect() { while(!client.connected()){ Serial.println("Attempting MQTT connection..."); if(client.connect("ESP8266Client")){ Serial.println("connected"); client.subscribe("test/topic"); }else{ Serial.print("failed with state "); Serial.print(client.state()); delay(2000); } } } void setup(){ pinMode(LED_BUILTIN,OUTPUT); Serial.begin(115200); WiFi.begin(WIFI_SSID,WIFI_PASS); while(WiFi.status()!=WL_CONNECTED){ delay(500); Serial.println("Connecting to WiFi..."); } Serial.println("Connected to WiFi network."); client.setServer(MQTT_SERVER,1883); client.setCallback(callback); } void loop(){ if(!client.connected()){ reconnect(); } client.loop(); } ``` 此代码片段实现了通过MQTT代理接收指令以改变内置LED状态的功能[^3]。 ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小黄人软件

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值