1. 程式人生 > >esp8266網路自動對時 串列埠字元連線 病顯示 12864i2c u8g2庫

esp8266網路自動對時 串列埠字元連線 病顯示 12864i2c u8g2庫

給別人定做的 做的
集成了 煙霧感測器
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);
//
}
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