ESP8266--温湿度在网页上显示

前言

 之前写过一篇Arduino–ESP8266–ESP-01学习笔记–连接WiFi、连接MQTT服务器、web显示获得了网友的很多关注,在那一个方案中使用Arduino+ESP8266+MQTT的方式把温湿度传感器的数据显示在网页上。现在,我将使用ESP8266+MQTT的方式将温湿度传感器的数据显示在网页上,这样就节省了一个MCU,而是把ESP8266当作MCU+WiFi。

 需要了解的东西:
 在各个物联网社区中大放异彩的ESP8266芯片融合了MCU+WiFi,既可以当MCU使用也可以当WiFi透传使用,它的开发潜力真的是文体两开放啊。于是乎,国外的一些大神就通过自己编写ESP8266的底层固件甚至是支持脚本解释器的固件来发起一些开源项目,

  • wemos

wemos

ESP8266--温湿度在网页上显示_第1张图片ESP8266--温湿度在网页上显示_第2张图片ESP8266--温湿度在网页上显示_第3张图片

nodemcu

ESP8266--温湿度在网页上显示_第4张图片

#include 
#include 
#include 

const char ssid[]     = "ESP8266-777";
const char password[] = "1234567890";
const int tcpPort     = 1010;
WiFiServer server(tcpPort);
IPAddress softLocal(192,168,0,104);//change
IPAddress softGateway(192,168,0,1);
IPAddress softSubnet(255,255,255,0);

dht11 DHT11_A;
dht11 DHT11_B;
#define DHT11PIN_A D2
#define DHT11PIN_B D8

WiFiClient serverClients[2];

SoftwareSerial mySerial(D7, D6);

uint8_t   g_temp = 16;
uint8_t   g_hume = 16;
uint16_t  g_pm25   = 10;
uint16_t  g_pm10 = 10;
const uint8_t  g_cfgtemp[4] = { 10, 15, 20, 25 };   //1: 0-10   2: 10-15   3: 15-20    4: 20-25    5: 25--
const uint8_t  g_cfghume[4] = { 10, 15, 20, 25 };   //1: 0-10   2: 10-15   3: 15-20    4: 20-25    5: 25--
const uint16_t g_cfgpm25[4] = { 25, 45, 60, 75 };   //1: 0-25   2: 25-45   3: 45-65    4: 65-85    5: 85--
const uint8_t  g_deltemp = 1;   //1: 0-10   2: 10-15   3: 15-20    4: 20-25    5: 25--
const uint8_t  g_delhume = 1;   //1: 0-10   2: 10-15   3: 15-20    4: 20-25    5: 25--
const uint16_t  g_delpm = 5;   //1: 0-10   2: 10-15   3: 15-20    4: 20-25    5: 25--

uint8_t   g_sendbuffer[5]   = { 0xAA,0x03,0x03,0x03,0xBB};
uint8_t   debug=0;
void setup()
{
  sysinit();
  setupWiFi();
  server.begin();
  server.setNoDelay(true);
  g_sendbuffer[0] = 0xAA;g_sendbuffer[1] = 0x03;g_sendbuffer[2] = 0x03;g_sendbuffer[3] = 0x03;g_sendbuffer[4] =0xBB;//debug
}

void loop()
{
    Serial.println("");  delay(50);
    Dht11ReadOutPut();
    Serial.println("");  delay(50);
    pmReadOutput();
    Serial.println("");  delay(50);
    //getSerialData();
    getdata();
    senddata();
}

void getSerialData(void)
{
    uint8_t i = 0;
    uint8_t val[5]={0x00,0x00,0x00,0x00,0x00};
    while(Serial.available()>0)
    {
        for( i = 0; i < 5; i++ )
        {
            if(Serial.available())
            {
                val[i]=(uint8_t)Serial.read();
            }
        }
        if((val[0]==0xAA) && (val[4]==0xBB))
        {
            g_temp = val[1];
            g_hume = val[2];
            g_pm25 = (0x00FF&val[3]);
            Serial.print("Getdata:");
            Serial.print(g_temp);Serial.print(g_hume);Serial.println(g_pm25);
        }
    }
}

void getdata()
{
    //temp
    switch(g_sendbuffer[1])
    {
        case 1:  if( g_temp >= ( g_cfgtemp[0] + g_deltemp ) ){  g_sendbuffer[1] = 2;} break;
        case 2:  if( g_temp >= ( g_cfgtemp[1] + g_deltemp ) ){  g_sendbuffer[1] = 3; } else if( g_temp <= g_cfgtemp[0] - g_deltemp ) {g_sendbuffer[1] = 1;} break;
        case 3:  if( g_temp >= ( g_cfgtemp[2] + g_deltemp ) ){  g_sendbuffer[1] = 4; } else if( g_temp <= g_cfgtemp[1] - g_deltemp ) {g_sendbuffer[1] = 2;} break;
        case 4:  if( g_temp >= ( g_cfgtemp[3] + g_deltemp ) ){  g_sendbuffer[1] = 5; } else if( g_temp <= g_cfgtemp[2] - g_deltemp ) {g_sendbuffer[1] = 3;} break;
        case 5:  if( g_temp <= g_cfgtemp[3] - g_deltemp ) { g_sendbuffer[1] = 4; } break;
        default: g_sendbuffer[1] = 3;
    }
    //hume
    switch(g_sendbuffer[2])
    {
        case 1:  if( g_hume >= ( g_cfghume[0] + g_delhume ) ){ g_sendbuffer[2] = 2;} break;
        case 2:  if( g_hume >= ( g_cfghume[1] + g_delhume ) ){ g_sendbuffer[2] = 3;} else if( g_hume <= g_cfghume[0] - g_delhume) {g_sendbuffer[2] = 1; }break;
        case 3:  if( g_hume >= ( g_cfghume[2] + g_delhume ) ){ g_sendbuffer[2] = 4;} else if( g_hume <= g_cfghume[1] - g_delhume) {g_sendbuffer[2] = 2; }break;
        case 4:  if( g_hume >= ( g_cfghume[3] + g_delhume ) ){ g_sendbuffer[2] = 5;} else if( g_hume <= g_cfghume[2] - g_delhume) {g_sendbuffer[2] = 3;} break;
        case 5:  if( g_hume <= g_cfghume[3] - g_delhume) g_sendbuffer[2] = 4; break;
        default: g_sendbuffer[2] = 3;
    }
    //pm25
    switch(g_sendbuffer[3])
    {
  //case 1:  if( g_pm25 => ( g_cfgpm25[0] + g_delpm ) ){ g_sendbuffer[3] = 3;} break;
        //case 2:  if( g_pm25 => ( g_cfgpm25[1] + g_delpm ) ){ g_sendbuffer[3] = 3;} else if( g_pm25 <= g_cfgpm25[0] - g_delpm) g_sendbuffer[3] = 3; break;
        case 3:  if( g_pm25 >= ( g_cfgpm25[2] + g_delpm ) ){ g_sendbuffer[3] = 4;} break;
        case 4:  if( g_pm25 >= ( g_cfgpm25[3] + g_delpm ) ){ g_sendbuffer[3] = 5;} else if( g_pm25 <= g_cfgpm25[2] - g_delpm){ g_sendbuffer[3] = 3;}break;
        case 5:  if( g_pm25 <= g_cfgpm25[3] - g_delpm) g_sendbuffer[3] = 4; break;
        default: g_sendbuffer[3] = 3;
    }
}

void senddata()
{   
    uint8_t i;
    if (server.hasClient())
    {
        for (i = 0; i < 2; i++)
        {
            if (!serverClients[i] || !serverClients[i].connected())
            {
                if (serverClients[i]) serverClients[i].stop();//未联接,就释放
                serverClients[i] = server.available();//分配新的
                continue;
            }
        }
        WiFiClient serverClient = server.available();
        serverClient.stop();
    }
    for (i = 0; i < 2; i++)
    {
        if (serverClients[i] && serverClients[i].connected())
        {
            serverClients[i].write(&g_sendbuffer[0],5);  //向所有客户端发送数据
            if (serverClients[i].available())
            {
                //Serial.print( "Clients IP & Port:  " );
                //Serial.print( serverClients[i].remoteIP());
                //Serial.println( serverClients[i].remotePort());
               //while (serverClients[i].available())
              //Serial.print ( "Get data from Clients: " );Serial.write(serverClients[i].read());  Serial.println ( "End" );
            }
        }
    }
}

void sysinit()
{
    const uint8_t pmOndata[9]  = {0xAA,0x01,0x00,0x00,0x00,0x00,0x01,0x66,0xBB};
    const uint8_t pmOffdata[9] = {0xAA,0x03,0x00,0x00,0x00,0x00,0x01,0x68,0xBB};
    Serial.begin(115200);
    mySerial.begin(9600);
    delay(10);
    mySerial.write(pmOndata,9);
    delay(1000);
   // mySerial.write(pmOffdata,9);
   // delay(10);
}

void setupWiFi()
{
    WiFi.mode(WIFI_AP);//debug
    WiFi.softAPConfig(softLocal, softGateway, softSubnet);
    WiFi.softAP(ssid,password);
    Serial.println();
    Serial.print ( "IP address: " );
    Serial.println ( WiFi.softAPIP() );
}

void Dht11ReadOutPut()
{
    uint8_t l=0;
    int chkA = DHT11_A.read(DHT11PIN_A);
    int chkB = DHT11_B.read(DHT11PIN_B);
    for( l = 0;l < 20; l++ )
    {
        if( ( chkA == DHTLIB_OK ) && ( chkB == DHTLIB_OK ) ){ Serial.println("Read DHT OK");changedata(); break;}
        else if(chkA == DHTLIB_OK) { Serial.println("Read DHT OK"); changedataA(); ;break; }
        else if(chkB == DHTLIB_OK) { Serial.println("Read DHT OK"); changedataA(); ;break; }
        else{ chkA = DHT11_A.read(DHT11PIN_A); delay(5); chkB = DHT11_B.read(DHT11PIN_B);}
        //Serial.println(l);
    }
    Serial.println("Read DHT OK");changedata();
    /*
    switch (chkA)
    {
        case DHTLIB_OK:             Serial.println("Read DHT0 OK");           break;
        case DHTLIB_ERROR_CHECKSUM: Serial.println("Read DHT0 chk error");    break;
        case DHTLIB_ERROR_TIMEOUT:  Serial.println("Read DHT0 timeout");      break;
        default:                    Serial.println("Read DHT0 Unknow error"); break;
    }
    switch (chkB)
    {
        case DHTLIB_OK:             Serial.println("Read DHT1 OK");           break;
        case DHTLIB_ERROR_CHECKSUM: Serial.println("Read DHT1 chk error");    break;
        case DHTLIB_ERROR_TIMEOUT:  Serial.println("Read DHT1 timeout");      break;
        default:                    Serial.println("Read DHT1 Unknow error"); break;
    }
    */

}
void changedata()
{
    g_temp = (uint8_t)((DHT11_A.temperature + DHT11_B.temperature ) >> 1);
    Serial.print("Temp(oC): "); delay(100);    Serial.println(g_temp);  delay(100);

    g_hume = (uint8_t)((DHT11_A.humidity + DHT11_B.humidity ) >> 1);
    Serial.print("Hum ( %): "); delay(100);    Serial.println(g_hume);  delay(100);
}
void changedataA()
{
    g_temp = (uint8_t)DHT11_A.temperature;
    Serial.print("Temp(oC): "); delay(100);    Serial.println(g_temp);  delay(100);

    g_hume = (uint8_t)DHT11_A.humidity;
    Serial.print("Hum ( %): "); delay(100);    Serial.println(g_hume);  delay(100);
}
void changedataB()
{
    g_temp = (uint8_t)DHT11_B.temperature;
    Serial.print("Temp(oC): "); delay(100);    Serial.println(g_temp);  delay(100);

    g_hume = (uint8_t)DHT11_B.humidity;
    Serial.print("Hum ( %): "); delay(100);    Serial.println(g_hume);  delay(100);
}

void pmReadOutput()
{
    uint8_t pm25_data[2]={0x00,0x00};
    uint8_t pm10_data[2]={0x00,0x00};
    char string_25[10];
    char string_10[10];  
    uint8_t data[] = {0xAA,0x02,0x00,0x00,0x00,0x00,0x01,0x67,0xBB};
    uint8_t i=0;
    mySerial.write(data,9);  delay(150);
    while(mySerial.available())
    {
        data[i] = mySerial.read();
        i++;
    }
    if( (data[0] == 0xAA) && (data[1] == 0x02) && (data[8] == 0xBB) )
    {
        g_pm25 = data[4]*256 + data[5];
        g_pm10 = data[2]*256 + data[3];
        //Serial.write(data,9);delay(100);//debug
        Serial.println("Read PM OK"); delay(110);
        Serial.print("PM25:");       delay(50);    Serial.print(g_pm25);  delay(50);  Serial.println(" ug/m3"); delay(50);  
        Serial.print("PM10:");       delay(50);    Serial.print(g_pm10);  delay(50);  Serial.println(" ug/m3"); delay(50);  
    }
    else
    {
        Serial.println("Read Pm Error");delay(100);//debug
    }
}


你可能感兴趣的:(C,ESP8266)