nodemcu web公告栏

材料准备:nodemcu + oled 12864 + dht11 + 导线若干(万能的淘宝下约30元!)
开发工具: Arduino ide
功能

  1. 局域网下查看传感器温湿度
  2. web端可输入oled屏幕显示内容
  3. oled屏幕显示温湿度、esp的IP和想显示的英文内容

效果图
上电初,稍稍等待wifi的连接
初始化初始界面
初始界面web端
电脑或手机与esp连接同一wifi。在浏览器内输入oled屏幕的ip
web端输入如“I love you”,按submit提交
I love you更加详细的代码和资料见:
https://github.com/callmebg/nodemcu_examples

#include <ESP8266WiFi.h>
#include <ESP8266WebServer.h>
#include <Adafruit_ssd1306syp.h>
#include <CN_SSD1306.h>
#include <string.h>
#include <SimpleDHT.h>

#define pinDHT11 4  //dht11 的2号脚与esp的4号角相连,板上标注为D2
#define SDA_PIN 14  //oled 上面的sda与esp的14号角相连,板上标注为D5
#define SCL_PIN 12  //oled 上面的scl与esp的12号角相连,板上标注为D6
#define STASSID "TP-LINK_465C3A"  //wifi的名字
#define STAPSK  "123456789"       //wifi密码

SimpleDHT11 dht11(pinDHT11);    //一个dht11的对象
ESP8266WebServer server(80);    //一个web对象
Adafruit_ssd1306syp display(SDA_PIN,SCL_PIN); //一个显示屏对象

unsigned char localIp[5] = "....";  //esp的ip
String msg = "test";                //显示文字内容
byte temperature = 0;               //温度 ℃
byte humidity = 0;                  //湿度 %
int err = SimpleDHTErrSuccess;      //dht11 错误信息

void change(uint32_t ip)  //翻译ip
{
  unsigned char* t = (unsigned char*)&ip;
  for(unsigned char i = 0; i < 4; i++)
  {
    localIp[i] = t[i]; 
  }
}
void homepage() 
{
  String content = "<html><head><title>hhh 我写出来了</title><meta charset='UTF-8'></head>";
    content += "<body><form action='/' method='GET'>项目地址:https://github.com/callmebg/nodemcu_examples<br>";
    content += "当前温度:" + String(temperature)+ "℃<br>";
    content += "当前湿度:" + String(humidity) + "%<br>";
    content += "输入想要显示的内容:<input type='text' name='words' placeholder='" + msg +"'><br>";
    content += "<input type='submit' name='SUBMIT' value='Submit'></form></body></html>";
  if (server.hasArg("words")) 
  {
    Serial.println("words");
    msg = server.arg("words");
  }
  server.send(200, "text/html", content);
  Serial.println("用户访问了主页");
}
void ifnotfound() 
{
  server.send(404, "text/html", "<html><head><title>见鬼了</title><meta charset='UTF-8'></head></html>嘤嘤嘤!你访问的页面被外星人劫持了哦");
  Serial.println("用户访问了一个不存在的页面");
}

void setup()
{
  Serial.begin(115200);
  Serial.println();
  
  //显示屏初始化
  display.initialize();
  display.setTextColor(WHITE); 
  display.println("wait a minute...");
  display.update();
  
  //wifi配置
  WiFi.mode(WIFI_STA);
  WiFi.begin(STASSID, STAPSK);
  Serial.print("Connecting");
  while (WiFi.status() != WL_CONNECTED)
  {
    delay(500);
    Serial.print(".");
  }
  Serial.println();
  Serial.print("Connected, IP address: ");
  Serial.print(WiFi.localIP());
  change(WiFi.localIP());
  
  //初始化WebServer
  server.on("/", homepage); //主页
  server.onNotFound(ifnotfound);  //404
  server.begin();
  Serial.println("HTTP server started");
  
}
void loop()
{
  unsigned char i;
  display.setCursor(0,0);
  display.setTextSize(1);
  //监听客户请求并处理
  server.handleClient();
  //读取温湿度
  if ((err = dht11.read(&temperature, &humidity, NULL)) != SimpleDHTErrSuccess) {
    Serial.print("Read DHT11 failed, err="); Serial.println(err);delay(1000);
    return;
  }
  Serial.print("Sample OK: ");
  Serial.print((int)temperature); Serial.print(" *C, "); 
  Serial.print((int)humidity); Serial.println(" H");
  //画面
  display.clear();
  display.print("DHT11: ");
  display.print(temperature);
  display.print("*C ");
  display.print((int)humidity);
  display.println("%");
  display.print("IP: ");
  display.print(localIp[0]);
  display.print(".");
  display.print(localIp[1]);
  display.print(".");
  display.print(localIp[2]);
  display.print(".");
  display.println(localIp[3]);
  display.setTextSize(2);
  display.println(msg);
  display.update();
  delay(500);//2Hz的频率
}
发布了45 篇原创文章 · 获赞 14 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/qq_34438779/article/details/104148894