找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 5741|回复: 0
收起左侧

WeMos D1搭建WiFi服务器

[复制链接]
ID:253527 发表于 2017-11-25 17:56 | 显示全部楼层 |阅读模式
#include <dht11.h>
#include <ESP8266WiFi.h>
#include <SoftwareSerial.h>

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
    }
}


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表