给别人定做的 做的
集成了 烟雾传感器
dht11
u8g2
网络 自动对时
#include <dht11.h>//程序中调用了dht11的库
#include <Arduino.h>
#include <U8g2lib.h>
#ifdef U8X8_HAVE_HW_SPI
#include <SPI.h>
#endif
#ifdef U8X8_HAVE_HW_I2C
#include <Wire.h>
#endif
#define AD5 A5 //定义模拟口A5
#define LED2 13
#define LED1 12//定义数字口13
int Button = 11; //定义按键脚
int Intensity = 0;//光照度数值
String comdata = "";
String str = "";
int a = 3;
U8G2_SSD1306_128X64_NONAME_1_SW_I2C u8g2(U8G2_R0, /* clock=*/ SCL, /* data=*/ SDA, /* reset=*/ U8X8_PIN_NONE);
dht11 DHT11;//定义一个名字叫做DHT11,类型为dht11的值。
#define DHT11PIN 2//定义DHT11的引脚号为D2。
/////////////////摄氏度计算/////////////////////
double Fahrenheit(double celsius)
{
return 1.8 * celsius + 32;
} //摄氏温度度转化为华氏温度
double Kelvin(double celsius)
{
return celsius + 273.15;
} //摄氏温度转化为开氏温度
// 露点(点在此温度时,空气饱和并产生露珠)
// 参考: http://wahiduddin.net/calc/density_algorithms.htm
double dewPoint(double celsius, double humidity)
{
double A0 = 373.15 / (273.15 + celsius);
double SUM = -7.90298 * (A0 - 1);
SUM += 5.02808 * log10(A0);
SUM += -1.3816e-7 * (pow(10, (11.344 * (1 - 1 / A0))) - 1) ;
SUM += 8.1328e-3 * (pow(10, (-3.49149 * (A0 - 1))) - 1) ;
SUM += log10(1013.246);
double VP = pow(10, SUM - 3) * humidity;
double T = log(VP / 0.61078); // temp var
return (241.88 * T) / (17.558 - T);
}
// 快速计算露点,速度是5倍dewPoint()
// 参考: http://en.wikipedia.org/wiki/Dew_point
double dewPointFast(double celsius, double humidity)
{
double a = 17.271;
double b = 237.7;
double temp = (a * celsius) / (b + celsius) + log(humidity / 100);
double Td = (b * temp) / (a - temp);
return Td;
}
/////////////////////////////////////////////////////////////
void setup()
{
pinMode(LED1, OUTPUT);
pinMode(LED2, OUTPUT);//设置LED为输出模式
pinMode(Button, INPUT_PULLUP);
digitalWrite(LED1,LOW);
digitalWrite(LED2,LOW);
Serial.begin(9600);
u8g2.begin();
}
//////////////////////////////////////////////////////////////////
void loop()
{
///////////////按键/////////////////////////////////////////
int ButtonState = digitalRead(Button); //设置变量存储读到的状态值
if(ButtonState==0)
{
digitalWrite(LED1,LOW); //判断,如果读到的状态为1,表明按键已经按下,这时候点亮LED
}
else
{
digitalWrite(LED1,HIGH);
}
////////////////DHT11/////////////////////////////////////////
int chk = DHT11.read(DHT11PIN);
switch (chk)
{
case DHTLIB_OK:
break;
case DHTLIB_ERROR_CHECKSUM:
break;
case DHTLIB_ERROR_TIMEOUT:
break;
default:
break;
}
///////////////////////光敏电阻///////////////////
Intensity = analogRead(A1); //读取模拟口AD5的值,存入Intensity变量
a=5000/Intensity;
////////////////////烟雾传感器//////////////////////
int val;
val = analogRead(0);
if(val>510)
{
digitalWrite(LED2,HIGH);
}
else
{
digitalWrite(LED2,LOW);
}
///////////////////////字符处理///////////////////
while (Serial.available() > 0)
{
comdata += char(Serial.read());//连接字符串
delay(2);
}
if (comdata.length() > 0)
{
str=comdata;
comdata = "";
}
///////////////////////12864///////////////////
u8g2.firstPage();
do {
u8g2.setFont(u8g2_font_5x7_tr); //设置字体//font_ncenB14_tr
u8g2.setCursor(0, 30); //设置光标处
u8g2.print("GZ:"); //输出内容
u8g2.setCursor(0,15); //设置光标处
u8g2.print("T:"); //输出内容
u8g2.setCursor(60,15); //设置光标处
u8g2.print("S:"); //输出内容
u8g2.setCursor(30,15); //设置光标处
u8g2.print("oC"); //输出内容
u8g2.setCursor(100,15); //设置光标处
u8g2.print("%"); //输出内容
u8g2.setFont(u8g2_font_5x7_tr); //设置字体
u8g2.setCursor(15,30); //设置光标处
u8g2.print((float)a); //输出内容
u8g2.setCursor(15,15); //设置光标处
u8g2.print((float)DHT11.temperature); //输出内容
u8g2.setCursor(75,15);
u8g2.print((float)DHT11.humidity);
u8g2.setCursor(0,45);
u8g2.print(str); //输出内容
} while ( u8g2.nextPage() );
}
![在这里插入图片描述](https://img-blog.csdn.net/20181016164229604?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzIzMzE4OQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve在这里插入图片描述/70)
下面是 刷进 esp8266代码
#include <ArduinoJson.h>
#include <ESP8266WiFi.h>
#include <ESP8266HTTPClient.h>
#define LED 2
String payload = "";
String str = "";//获取数据储存变量
String com, tem1, tem2, humi, temnow, sta, state1, state2, time0, time1, time2, english;
String webadd = "http://flash.weather.com.cn/wmaps/xml/zhengzhou.xml"; //天气接口地址
String time_url = "http://quan.suning.com/getSysTime.do"; //时间接口地址
String english_url = "http://open.iciba.com/dsapi/"; //英语接口地址
String daytime = "";
void smartConfig()
{
WiFi.mode(WIFI_STA);
Serial.println("\r\nWait for Smartconfig");
WiFi.beginSmartConfig();
while (1)
{
Serial.print(".");
digitalWrite(LED, 0);
delay(500);
digitalWrite(LED, 1);
delay(500);
if (WiFi.smartConfigDone())
{
Serial.println("SmartConfig Success");
Serial.printf("SSID:%s\r\n", WiFi.SSID().c_str());
Serial.printf("PSW:%s\r\n", WiFi.psk().c_str());
break;
}
}
}
void setup()
{
Serial.begin(9600);
pinMode(LED, OUTPUT);
digitalWrite(LED, 0);
smartConfig();
}
/*****************************************http数据获取*******************************************/
void http() {
HTTPClient http;
http.begin(webadd);
int httpCode = http.GET();
if (httpCode > 0) {
payload = http.getString();
//Serial.println(payload);
int a = payload.indexOf("101180101");//自己搜索链接可知指定城市的id郑州市的id为‘101180101’
//indexof();在字符串中中查找字符位置,返回值为给定字符的第一个位置,查找失败返回-1
com = payload.substring(a - 280, a + 12);
//字符串解析函数:substring(?,...),返回值为指定位置的字符串值
//Serial.println(com);
//<city cityX="376" cityY="184" cityname="郑州市" centername="郑州市" fontColor="FFFF00" pyName="" state1="0" state2="1" stateDetailed="晴转多云" tem1="37" tem2="24" temNow="33" windState="南风3-4级" windDir="西南风" windPower="2级" humidity="39%" time="11:00" url="101180101"/>
}
http.end();
}
/*********************************获取时间**************************************/
void get_time()
{
HTTPClient http;
http.begin(time_url);
int httpCode = http.GET();
if (httpCode > 0) {
payload = http.getString();
str= payload.substring(41,57);
delay(1000);
Serial.println(str);
}
http.end();
}
/*************************获取每日英语*******************/
/**************************************天气判断**************************************************/
/*************************************截取字符数据处理*******************************************/
void data() {
int i = 0;
i = com.indexOf("tem1");
tem1 = com.substring(i + 6, i + 8);
i = 0;
i = com.indexOf("tem2"); //tem2="24"
tem2 = com.substring(i + 6, i + 8);
i = 0;
i = com.indexOf("temNow");
temnow = com.substring(i + 8, i + 10);
i = 0;
i = com.indexOf("humidity");
humi = com.substring(i + 10, i + 13); //humidity="27%"
i = 0;
i = com.indexOf("state1");
state1 = com.substring(i + 8, i + 9);
i = 0;
i = com.indexOf("state2");
state2 = com.substring(i + 7, i + 11);
i = 0;
}
/*********************************************屏幕显示**************************************************/
void loop()
{
digitalWrite(LED, 1);
get_time();
http();
data();
// show();
delay(200);
}
另外 找到 大神 做的 esp8266暗转开发版的 软件
有兴趣 可以加q群 阿正工作站:476840321