前段时间无意间在老王家发现这款温湿度计,ESP8266-12F,竟然只要4.9元,查了下是光合未来的产品,官网还在,app不能用。光是安信可的ESP8266-12F就不止这个价格了,而且还有两块小电池,一个dht11模块,果断下手。到手后研究了下,再综合前辈的经验,可以做到无需开壳刷固件,故此记录,分享给需要的人。
电脑浏览器访问:
手机浏览器访问
只要在 同一个局域网 内,所有设备均可访问
1、电脑,需安装arduino ide
2、电烙铁一把
3、光和未来ESP8266温湿度传感器
4、usb转ttl
5、usb公头(可剪开废弃的数据线获得)
6、杜邦线四根
7、otg线一根
有了以上材料就可以开始制作刷机线了
按如图所示通过杜邦线将usb公头与usb转ttl模块连接起来,定义如下:
usb公头 | usb转ttl模块 |
---|---|
电源正 | 3V3或者5V |
信号负(D-) | TXD |
信号正(D+) | RXD |
电源负 | GND |
将以下代码拷贝到arduino IDE里面
所需的库自行百度安装,此处不再赘述
代码中
const char* ssid = "Running_free"; // 这里填wifi名,只支持2.4G
const char* password = "Running_free_pass"; //这里填wifi密码
这两行填入自己的wifi信息
这里可以改成自己想要的IPIP4_ADDR(&info.ip, 192, 168, 1, 88);
IP可以不改
#include
#include
#include "DHT.h"
uint8_t LEDPin = 12;
#include //导入定时器库
Ticker flipper; //实例化定时器对象
int count = 0;
void flip() { //回调函数
// int state = digitalRead(LED_BUILTIN);
// digitalWrite(LED_BUILTIN, !state);
int state = digitalRead(LEDPin);
// digitalWrite(LEDPin, !state);
digitalWrite(LEDPin, 1);
delay(800);
digitalWrite(LEDPin, 0);
++count;
if (count == 20) {
flipper.attach(0.1, flip); //每隔0.1秒执行一次回调函数
}
else if (count == 120) {
flipper.detach();
}
}
// Uncomment one of the lines below for whatever DHT sensor type you're using!
#define DHTTYPE DHT11 // DHT 11
//#define DHTTYPE DHT21 // DHT 21 (AM2301)
//#define DHTTYPE DHT22 // DHT 22 (AM2302), AM2321
/*Put your SSID & Password*/
const char* ssid = "Running_free"; // 这里填wifi名,只支持2.4G
const char* password = "Running_free_pass"; //这里填wifi密码
ESP8266WebServer server(80);
IPAddress myIP; // IP address in your local wifi net
// DHT Sensor
//uint8_t DHTPin = D4;
uint8_t DHTPin = 4;
//uint8_t LEDPin = 12;
// Initialize DHT sensor.
DHT dht(DHTPin, DHTTYPE);
float Temperature;
float Humidity;
void setup() {
Serial.begin(74880);
delay(100);
pinMode(LED_BUILTIN, OUTPUT); // Initialize the LED_BUILTIN pin as an output
// digitalWrite(LED_BUILTIN, LOW); // Turn the LED on (Note that LOW is the voltage level
// // but actually the LED is on; this is because
// // it is active low on the ESP-01)
// delay(2000); // Wait for a second
digitalWrite(LED_BUILTIN, HIGH); // Turn the LED off by making the voltage HIGH
pinMode(LEDPin, OUTPUT);
digitalWrite(LEDPin, LOW);
flipper.attach(30, flip);//每隔0.5秒执行一次回调函数
pinMode(DHTPin, INPUT);
dht.begin();
Serial.println("Connecting to ");
Serial.println(ssid);
//connect to your local wi-fi network
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);
//Static IP setting---by Fang
wifi_station_dhcpc_stop();
struct ip_info info;
IP4_ADDR(&info.ip, 192, 168, 1, 88);
IP4_ADDR(&info.gw, 192, 168, 1, 1);
IP4_ADDR(&info.netmask, 255, 255, 255, 0);
wifi_set_ip_info(STATION_IF, &info);
//check wi-fi is connected to wi-fi network
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected..!");
Serial.print("Got IP: "); Serial.println(WiFi.localIP());
server.on("/", handle_OnConnect);
server.onNotFound(handle_NotFound);
server.begin();
Serial.println("HTTP server started");
}
void loop() {
server.handleClient();
}
void handle_OnConnect() {
Temperature = dht.readTemperature(); // Gets the values of the temperature
Humidity = dht.readHumidity(); // Gets the values of the humidity
server.send(200, "text/html", SendHTML(Temperature,Humidity));
}
void handle_NotFound(){
server.send(404, "text/plain", "Not found");
}
String SendHTML(float Temperaturestat,float Humiditystat){
String ptr = " \n";
ptr +=" \n";
ptr +="\n";
ptr +="\n";
ptr +="智能温湿计 \n";
ptr +="\n";
ptr +="\n";
ptr +="\n";
ptr +="\n";
ptr +="室内温室检测系统
\n";
ptr +="\n";
ptr +="\n";
ptr +="\n";
ptr +="\n";
ptr +="室内温度:\n";
ptr +="";
ptr +=(int)Temperaturestat;
ptr +="°C\n";
ptr +="\n";
ptr +="\n";
ptr +="\n";
ptr +=";
ptr +=";
ptr +="c-0.438,1.574-2.264,4.681-6.252,4.681c-3.988,0-5.813-3.107-6.252-4.681C-0.313,11.267,0.026,9.143,1.819,6.217\"> \n";
ptr +="\n";
ptr +="\n";
ptr +="室内湿度:\n";
ptr +="";
ptr +=(int)Humiditystat;
ptr +="%\n";
ptr +="\n";
//定义温度变量,并且赋值,用于逻辑判断。
int wd = Temperaturestat ;
if (wd>=30){
ptr +="今天天气热,注意防暑哦\n";
}
if (29>=wd&&wd>20){
ptr +="今天天气不错吆,尽情的玩耍吧\n";
}
if (wd<10){
ptr +="今天天气比较冷,多穿点衣服,小心着凉\n";
}
ptr +="\n";
ptr +="\n";
ptr +="\n";
return ptr;
}
5.下载成功后拔掉otg线,关闭光合未来的开关再重新打开,等待esp模块连上wifi,大概几秒就好了,然后打开 同一局域网 下的手机或者电脑的浏览器,访问 http://192.168.1.88,如在代码中修改了ip,则需要输入你修改的ip,注意不要和现有设备冲突, 即可看到如下界面了
1、一定要在等到IDE出现connecting…_____后在打开光合未来上的开关,否则下载不成功
2、个人建议不要长时间给模块充电或者插电使用,因为内部没有充电电路,就是通过usb口直接接了一个二极管到电池,长时间充电容易发生故障
3、研究了下为什么这样可以下载程序成功,因为在该模块中把esp8266的rx和tx引脚分别直接接到了usb口的D+和D-,GPIO0接到了usb口的Sense引脚,而otg线内部是将Sense引脚和GND短接的,所以就相当于插上otg线后再给模块通电,esp模块gpio0被拉低,就进入了下载模式,所以用此方法无法打印串口信息。如需打印串口信息,需要用数据线代替otg线,即不要短接Sense引脚和GND