esp8266 作为webserver 控制LED

#include
#include
#include
/*** 该工程可以在2.6.3版本esp8266库中运行,没在更高版本库中进行测试 ***/SDA接D2,SCL接D1 I2C接口屏
U8G2_SSD1306_128X64_NONAME_F_SW_I2C u8g2(U8G2_R0, /* clock=*/ SCL, /* data=*/ SDA, /* reset=*/ U8X8_PIN_NONE);   // All Boards without Reset of the Display, Full screen buffer mode
//U8G2_R0  正常显示
//U8G2_R1 90度顺时针旋转
//U8G2_R2 180度顺时针旋转
//U8G2_R3 270度顺时针旋转
const char* ssid = "zhiyong";//待连接WIFI,改成自己的wifi账号密码
const char* password = "l13314167123";//待连接WIFI密码

WiFiServer server(80);//默认端口

String readString = ""; //建立一个字符串对象用来接收存放来自客户的数据

//响应头
String responseHeaders =
  String("") +
  "HTTP/1.1 200 OK\r\n" +
  "Content-Type: text/html\r\n" +
  "Connection: close\r\n" +
  "\r\n";

//网页
String myhtmlPage =
  String("") +
  "" +
  "" +
  ""+//增加中文显示UTF-8是网络中文默认编码
  "    ESP8266 Web Server Test" +
  "    " +
  "" +
  "" +
  "    

关闭状态
" +
  "    " +
  "" +
  "


bool isLedTurnOpen = false; // 记录LED状态
int LED = 2 //对应板子编号D4
          void setup()
{
  u8g2.begin();
  u8g2.enableUTF8Print();    // enable UTF8 support for the Arduino print() function

  u8g2.setFont(u8g2_font_wqy15_t_chinese2); //u8g2_font_unifont_t_chinese2
  pinMode(LED, OUTPUT);
  digitalWrite(LED, LOW); // 熄灭LED


  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED)
  {
    show("正在连接中", 1);
    delay(500);

  }
  show("服务端已连接", 3);
  delay(500);
  server.begin();

  show( WiFi.localIP().toString().c_str(), 3);
  delay(1000);
}
void show(String str, int n) {
  u8g2.clearBuffer();         // 清除内部缓冲区
  u8g2.setCursor(0, 15);
  u8g2.print("Web Server");
  u8g2.setCursor(0, 15 + 15 * n);
  u8g2.print(str);
  u8g2.sendBuffer();          // transfer internal memory to the display
  delay(500);
}
void loop()
{
  WiFiClient client = server.available(); //尝试建立客户对象
  if (client)                             //如果当前有客户可用
  {
    boolean currentLineIsBlank = true;
    show("客户端已连接", 3);
    delay(100);
    while (client.connected()) //如果客户端建立连接
    {

      if (client.available()) //等待有可读数据
      {

        char c = client.read(); //读取一字节数据
        readString += c;        //拼接数据
        /************************************************/
        if (c == '\n' && currentLineIsBlank) //等待请求头接收完成(接收到空行)
        {
          //比较接收到的请求数据
          if (readString.startsWith("GET / HTTP/1.1")) //如果是网页请求
          {
            client.print(responseHeaders); //向客户端输出网页响应
            client.print(myhtmlPage);      //向客户端输出网页内容
            client.print("\r\n");
          }
          else if (readString.startsWith("GET /Switch")) //如果是改变LED状态请求
          {
            if (isLedTurnOpen == false)
            {
              show("LED 已经点亮", 2);
              delay(100);
              digitalWrite(LED, HIGH); // 点亮LED点亮(高电平控制),led灯如果是低电平控制,把D4脚接LED负极(短脚),LED正极(长脚)接3.3,digitalWrite(LED, LOW)为灯亮
              client.print("LED 已经点亮");
              isLedTurnOpen = true;
            }
            else
            {
              show("LED 已经关闭", 2);
              delay(100);
              digitalWrite(LED, LOW ); // 熄灭LED
              client.print("LED 已经关闭");
              isLedTurnOpen = false;
            }
          }
          else
          {
            client.print("\r\n");
          }
          break;
        }

        if (c == '\n')
        {
          currentLineIsBlank = true; //开始新行
        }
        else if (c != '\r')
        {
          currentLineIsBlank = false; //正在接收某行中
        }
 
      }
    }
    delay(1);      //等待客户完成接收
    client.stop(); //结束当前连接:

    show("客户端已断开", 3);
    delay(1000);

    readString = "";
  }
}

 

 

 

你可能感兴趣的:(小程序)