|
|
爱科技、爱创意、爱折腾、爱极致,我们都是技术控
您需要 登录 才可以下载或查看,没有账号?立即注册
x
现在能做到网页显示温度湿度(也是抄了别人的程序),可是oled我只会显示出文字温度湿度,没办法把测量出来的数值用oled显示出来,哪位高手帮忙看看呗,
#include <ESP8266WiFi.h>
#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels
// Declaration for SSD1306 display connected using software SPI (default case):
#define OLED_MOSI D7
#define OLED_CLK D5
#define OLED_DC D1
#define OLED_CS D8
#define OLED_RESET D3
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT,
OLED_MOSI, OLED_CLK, OLED_DC, OLED_RESET, OLED_CS);
#define NUMFLAKES 10 // Number of snowflakes in the animation example
#define LOGO_HEIGHT 16
#define LOGO_WIDTH 16
const char* ssid = "RONBON";
const char* password = "longbang2015";
int temp = 0;//温度
int humi = 0;//湿度
unsigned int loopCnt;
int chr[40] = {0};
unsigned long timer;
#define pin D4
WiFiServer server(80);
static const unsigned char PROGMEM logo_bmp[] =
{ B00000000, B11000000,
B00000001, B11000000,
B00000001, B11000000,
B00000011, B11100000,
B11110011, B11100000,
B11111110, B11111000,
B01111110, B11111111,
B00110011, B10011111,
B00011111, B11111100,
B00001101, B01110000,
B00011011, B10100000,
B00111111, B11100000,
B00111111, B11110000,
B01111100, B11110000,
B01110000, B01110000,
B00000000, B00110000 };
/**
* 获取温湿度
*/
void get_humiture() {
bgn:
delay(2000);
//设置2号接口模式为:输出
//输出低电平20ms(>18ms)
//输出高电平40μs
pinMode(pin,OUTPUT);
digitalWrite(pin,LOW);
delay(20);
digitalWrite(pin,HIGH);
delayMicroseconds(40);
digitalWrite(pin,LOW);
//设置2号接口模式:输入
pinMode(pin,INPUT);
//高电平响应信号
loopCnt=10000;
while(digitalRead(pin) != HIGH)
{
if(loopCnt-- == 0)
{
//如果长时间不返回高电平,输出个提示,重头开始。
// Serial.println("HIGH");
goto bgn;
}
}
//低电平响应信号
loopCnt=30000;
while(digitalRead(pin) != LOW)
{
if(loopCnt-- == 0)
{
//如果长时间不返回低电平,输出个提示,重头开始。
// Serial.println("LOW");
goto bgn;
}
}
//开始读取bit1-40的数值
for(int i=0;i<40;i++)
{
while(digitalRead(pin) == LOW)
{}
//当出现高电平时,记下时间“timer”
timer = micros();
while(digitalRead(pin) == HIGH)
{}
//当出现低电平,记下时间,再减去刚才储存的timer
//得出的值若大于50μs,则为‘1’,否则为‘0’
//并储存到数组里去
if (micros() - timer >50)
{
chr[i]=1;
}else{
chr[i]=0;
}
}
//湿度,8位的bit,转换为数值
humi=chr[0]*128+chr[1]*64+chr[2]*32+chr[3]*16+chr[4]*8+chr[5]*4+chr[6]*2+chr[7];
//温度,8位的bit,转换为数值
temp=chr[16]*128+chr[17]*64+chr[18]*32+chr[19]*16+chr[20]*8+chr[21]*4+chr[22]*2+chr[23];
}
void setup() {
// SSD1306_SWITCHCAPVCC = generate display voltage from 3.3V internally
if(!display.begin(SSD1306_SWITCHCAPVCC)) {
Serial.println(F("SSD1306 allocation failed"));
for(;;); // Don't proceed, loop forever
}
pinMode(D4, OUTPUT);
Serial.begin(115200);
delay(10);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected");
// Start the server
server.begin();
Serial.println("Server started");
// Print the IP address
Serial.println(WiFi.localIP());
//中文:温 (这就是存储点阵变量,str_1可以修改成自己喜欢的名称,用函数display.drawBitmap()调用就可以了)
static const unsigned char PROGMEM str_1[] =
{
0x00,0x00,0x23,0xF8,0x12,0x08,0x12,0x08,0x83,0xF8,0x42,0x08,0x42,0x08,0x13,0xF8,
0x10,0x00,0x27,0xFC,0xE4,0xA4,0x24,0xA4,0x24,0xA4,0x24,0xA4,0x2F,0xFE,0x00,0x00
};
//中文:度
static const unsigned char PROGMEM str_2[] =
{
0x01,0x00,0x00,0x80,0x3F,0xFE,0x22,0x20,0x22,0x20,0x3F,0xFC,0x22,0x20,0x22,0x20,
0x23,0xE0,0x20,0x00,0x2F,0xF0,0x24,0x10,0x42,0x20,0x41,0xC0,0x86,0x30,0x38,0x0E
};
//中文::
static const unsigned char PROGMEM str_3[] =
{
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x30,0x00,0x30,0x00,0x00,0x00,0x30,0x00,0x30,0x00,0x00,0x00,0x00,0x00
};
//中文:湿
static const unsigned char PROGMEM str_4[] =
{
0x00,0x00,0x27,0xF8,0x14,0x08,0x14,0x08,0x87,0xF8,0x44,0x08,0x44,0x08,0x17,0xF8,
0x11,0x20,0x21,0x20,0xE9,0x24,0x25,0x28,0x23,0x30,0x21,0x20,0x2F,0xFE,0x00,0x00
};
//中文:室
static const unsigned char PROGMEM str_5[] =
{
0x02,0x00,0x01,0x00,0x7F,0xFE,0x40,0x02,0x80,0x04,0x3F,0xF8,0x04,0x00,0x08,0x20,
0x1F,0xF0,0x01,0x10,0x01,0x00,0x3F,0xF8,0x01,0x00,0x01,0x00,0xFF,0xFE,0x00,0x00
};
//中文字符显示
display.clearDisplay();
display.drawBitmap(0, 0, str_1, 16, 16, 1); //在坐标X:26 Y:16的位置显示中文字符凌
display.drawBitmap(16, 0, str_2, 16, 16, 1); //在坐标X:42 Y:16的位置显示中文字符顺
display.drawBitmap(32, 0, str_3, 16, 16, 1);
//display.print(":");
display.print(humi);
//display.int temp(48, 0, str_3, 16, 16, 1);
display.drawBitmap(0, 16, str_4, 16, 16, 1);
display.drawBitmap(16, 16, str_2, 16, 16, 1);
display.drawBitmap(32, 16, str_3, 16, 16, 1);
display.display(); //把缓存的都显示
}
void loop() {
//中文:温 (这就是存储点阵变量,str_1可以修改成自己喜欢的名称,用函数display.drawBitmap()调用就可以了)
static const unsigned char PROGMEM str_1[] =
{
0x00,0x00,0x23,0xF8,0x12,0x08,0x12,0x08,0x83,0xF8,0x42,0x08,0x42,0x08,0x13,0xF8,
0x10,0x00,0x27,0xFC,0xE4,0xA4,0x24,0xA4,0x24,0xA4,0x24,0xA4,0x2F,0xFE,0x00,0x00
};
//中文:度
static const unsigned char PROGMEM str_2[] =
{
0x01,0x00,0x00,0x80,0x3F,0xFE,0x22,0x20,0x22,0x20,0x3F,0xFC,0x22,0x20,0x22,0x20,
0x23,0xE0,0x20,0x00,0x2F,0xF0,0x24,0x10,0x42,0x20,0x41,0xC0,0x86,0x30,0x38,0x0E
};
//中文::
static const unsigned char PROGMEM str_3[] =
{
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x30,0x00,0x30,0x00,0x00,0x00,0x30,0x00,0x30,0x00,0x00,0x00,0x00,0x00
};
//中文:湿
static const unsigned char PROGMEM str_4[] =
{
0x00,0x00,0x27,0xF8,0x14,0x08,0x14,0x08,0x87,0xF8,0x44,0x08,0x44,0x08,0x17,0xF8,
0x11,0x20,0x21,0x20,0xE9,0x24,0x25,0x28,0x23,0x30,0x21,0x20,0x2F,0xFE,0x00,0x00
};
//中文:室
static const unsigned char PROGMEM str_5[] =
{
0x02,0x00,0x01,0x00,0x7F,0xFE,0x40,0x02,0x80,0x04,0x3F,0xF8,0x04,0x00,0x08,0x20,
0x1F,0xF0,0x01,0x10,0x01,0x00,0x3F,0xF8,0x01,0x00,0x01,0x00,0xFF,0xFE,0x00,0x00
};
//中文字符显示
display.clearDisplay();
display.drawBitmap(0, 0, str_1, 16, 16, 1); //在坐标X:26 Y:16的位置显示中文字符凌
display.drawBitmap(16, 0, str_2, 16, 16, 1); //在坐标X:42 Y:16的位置显示中文字符顺
display.drawBitmap(32, 0, str_3, 16, 16, 1);
//display.print(":");
display.print(humi);
//display.int temp(48, 0, str_3, 16, 16, 1);
display.drawBitmap(0, 16, str_4, 16, 16, 1);
display.drawBitmap(16, 16, str_2, 16, 16, 1);
display.drawBitmap(32, 16, str_3, 16, 16, 1);
display.display(); //把缓存的都显示
// Check if a client has connected检查客户端是否已连接
WiFiClient client = server.available();
if (!client) {
return;
}
// Wait until the client sends some data等待客户端发送一些数据
Serial.println("new client connected");
while(!client.available()){
delay(1);
}
// Read the first line of the request阅读请求的第一行
String req = client.readStringUntil('\r');
Serial.println(req);
client.flush();
get_humiture();
// Prepare the response
String page = "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n<!DOCTYPE HTML>\r\n<html>\r\n<head>";
page += "<meta charset='utf-8'>";
// page += "\r\n<link href='https://cdn.staticfile.org/twitter-bootstrap/3.3.7/css/bootstrap.min.css' rel='stylesheet'>";
page += "\r\n<script src='https://cdn.bootcdn.net/ajax/libs/jquery/3.5.1/jquery.js'></script>";
page += "\r\n</head>\r\n<body style='padding:10px'>";
page += "\r\n<h1>实时温湿度:</h1><br>";
// 日期
page += "\r\n<div id='date'></div><br>";
String humistring = "温度: ";
humistring += temp;
humistring += " 湿度:";
humistring += humi;
// 温湿度
page += "\r\n<div id='content'>";
page += humistring;
page += "</div><br>";
page += "\r\n<script>\r\n";
page += "var date = new Date(); $('#date').text(date);";
page += "\r\n";
page += "setInterval(function(){$.post('/gethumi', {}, function(res) {var date = new Date(); $('#date').text(date); $('#content').html(res);})}, 3000);";
page += "\r\n";
page += "console.log('" + humistring + "')";
page += "\r\n</script>";
page += "\r\n</body>\r\n</html>\n";
// Match the request
if (req.indexOf("/index.html") != -1) {
client.print(page);
return;
} else if (req.indexOf("/gethumi") != -1) {
String humires = "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n<!DOCTYPE HTML>\r\n<html>\r\n<head>";
humires += "<meta charset='utf-8'></head><body>";
humires += humistring;
humires += "</body></html>";
client.print(humires);
} else {
Serial.println("invalid request");
client.stop();
return;
}
delay(1);
//display.display();
//display.clearDisplay();
//display.setTextSize(2);
//display.setCursor(0,0);
//display.println("int temp");
//display.display();
display.clearDisplay();
display.drawBitmap(0, 0, str_1, 16, 16, 1); //在坐标X:26 Y:16的位置显示中文字符凌
display.drawBitmap(16, 0, str_2, 16, 16, 1); //在坐标X:42 Y:16的位置显示中文字符顺
display.drawBitmap(32, 0, str_3, 16, 16, 1);
display.drawBitmap(48, 0, humi, 16, 16, 1);
//display.print(":");
//display.print(humi);
//display.int temp(48, 0, str_3, 16, 16, 1);
display.drawBitmap(0, 16, str_4, 16, 16, 1);
display.drawBitmap(16, 16, str_2, 16, 16, 1);
display.drawBitmap(32, 16, str_3, 16, 16, 1);
display.display(); //把缓存的都显示
}
|
|