|
本帖最后由 wei27311 于 2019-8-30 11:39 编辑
之前用的是0.96寸的oled单色屏
U8g2库驱动刷新率很满意但屏幕太小了
这2.2寸彩色lcd拿到手后折腾了一个晚上都无法用
后来发现是Arduino UNO R3引脚电平与这个lcd不匹配
改用esp8266后一次驱动成功
由于是彩色屏所以改用Ucglib库
屏幕大了分辨率高的效果真的很好
遗憾的是刷新率不理想
接线:
VCC -> 3.3V
GND -> GND
CS -> D8
RESET -> D2
DC/RS -> D1
SDI/MOSI -> D7
SCK -> D5
LED -> 3.3V或PWM控制亮度
- #include "Ucglib.h"
- #include <dht11.h>
- #define DHT11PIN D6 //DHT11 data接D6引脚
- #include <SPI.h>
- dht11 DHT11;
- Ucglib_ILI9341_18x240x320_HWSPI ucg(/*cd=*/ D1, /*cs=*/ D8, /*reset=*/ D2);
- //左边仪表
- void draw(int value) {
- int cx = 76; //圆心x
- int cy = 120; //圆心y
- int cr = 75; //圆半径r
- float angle; //数值转换指针偏转角度
- float rad; //指针偏转角度转换弧度
-
- //仪表指针及轨迹
- for(float i=0;i<=value;i+=0.25)
- {
- angle = 150+i*2.4;
- rad = angle/180*PI;
- if(i<value)
- {
- ucg.setColor(0,255,255);
- ucg.drawLine(cx+(cr-5)*cos(rad),cy+(cr-5)*sin(rad),cx+cr*cos(rad),cy+cr*sin(rad));
- }
- else
- {
- ucg.setColor(0,255,255);
- ucg.drawLine(cx+(cr-70)*cos(rad),cy+(cr-70)*sin(rad),cx+cr*cos(rad),cy+cr*sin(rad));
- }
- }
- //仪表中心小圆
- ucg.setColor(0,255,255);
- ucg.drawDisc(cx,cy,(cr-70),UCG_DRAW_ALL);
-
- //仪表刻度
- for(int i=0;i<=100;i+=2.5){
- angle = 150+i*2.4;
- rad = angle/180*PI;
- if(i==0 ||i==20 ||i==40 ||i==60 ||i==80 ||i==100)
- {
- //刻度线
- ucg.setColor(255,255,255);
- ucg.drawLine(cx+(cr-15)*cos(rad),cy+(cr-15)*sin(rad),cx+cr*cos(rad),cy+cr*sin(rad));
- //刻度数值
- ucg.setColor(255,255,255);
- ucg.setFont(ucg_font_ncenR14_tr);
- ucg.setPrintPos((cx-8)+(cr-30)*cos(rad),(cy+5)+(cr-30)*sin(rad));
- ucg.print(i);
- }
- else if(i==10 ||i==30 ||i==50 ||i==70 ||i==90)
- {
- //刻度线
- ucg.setColor(255,255,255);
- ucg.drawLine(cx+(cr-15)*cos(rad),cy+(cr-15)*sin(rad),cx+cr*cos(rad),cy+cr*sin(rad));
- }
- else
- {
- //刻度线
- ucg.setColor(255,255,255);
- ucg.drawLine(cx+(cr-10)*cos(rad),cy+(cr-10)*sin(rad),cx+cr*cos(rad),cy+cr*sin(rad));
- }
- }
-
- //仪表外圆
- ucg.setColor(255,255,255);
- ucg.drawCircle(cx,cy,cr,UCG_DRAW_ALL);
- }
- //右边仪表
- void draw2(int value) {
- int cx = 244; //圆心x
- int cy = 120; //圆心y
- int cr = 75; //圆半径r
- float angle; //数值转换指针偏转角度
- float rad; //指针偏转角度转换弧度
-
- //仪表指针及轨迹
- for(float i=0;i<=value;i+=0.25)
- {
- angle = 150+i*4.8;
- rad = angle/180*PI;
- if(i<value)
- {
- ucg.setColor(255,0,0);
- ucg.drawLine(cx+(cr-5)*cos(rad),cy+(cr-5)*sin(rad),cx+cr*cos(rad),cy+cr*sin(rad));
- }
- else
- {
- ucg.setColor(255,0,0);
- ucg.drawLine(cx+(cr-70)*cos(rad),cy+(cr-70)*sin(rad),cx+cr*cos(rad),cy+cr*sin(rad));
- }
- }
- //仪表中心小圆
- ucg.setColor(255,0,0);
- ucg.drawDisc(cx,cy,(cr-70),UCG_DRAW_ALL);
-
- //仪表刻度
- for(int i=0;i<=50;i+=1){
- angle = i*4.8+150;
- rad = angle/180*PI;
- if(i==0 ||i==10 ||i==20 ||i==30 ||i==40 ||i==50)
- {
- //刻度线
- ucg.setColor(255,255,255);
- ucg.drawLine(cx+(cr-15)*cos(rad),cy+(cr-15)*sin(rad),cx+cr*cos(rad),cy+cr*sin(rad));
- //刻度数值
- ucg.setColor(255,255,255);
- ucg.setFont(ucg_font_ncenR14_tr);
- ucg.setPrintPos((cx-8)+(cr-30)*cos(rad),(cy+5)+(cr-30)*sin(rad));
- ucg.print(i);
- }
- else if(i==5 ||i==15 ||i==25 ||i==35 ||i==45)
- {
- //刻度线
- ucg.setColor(255,255,255);
- ucg.drawLine(cx+(cr-10)*cos(rad),cy+(cr-10)*sin(rad),cx+cr*cos(rad),cy+cr*sin(rad));
- }
- else
- {
- //刻度线
- ucg.setColor(255,255,255);
- ucg.drawLine(cx+(cr-5)*cos(rad),cy+(cr-5)*sin(rad),cx+cr*cos(rad),cy+cr*sin(rad));
- }
- }
-
- //仪表外圆
- ucg.setColor(255,255,255);
- ucg.drawCircle(cx,cy,cr,UCG_DRAW_ALL);
- }
- void setup(void) {
- pinMode(DHT11PIN,OUTPUT);
- delay(1000);
- ucg.begin(UCG_FONT_MODE_TRANSPARENT); //字体透明模式
- ucg.setRotate90(); //屏幕旋转90度
- }
- void loop(void) {
- int chk = DHT11.read(DHT11PIN); //将读取到的值赋给chk
- int tem=(float)DHT11.temperature; //将温度值赋值给tem
- int hum=(float)DHT11.humidity; //将湿度值赋值给hum
- ucg.clearScreen(); //清屏
- draw(hum);
- draw2(tem);
- delay(10000); //10秒刷新一次
- }
复制代码
|
ili9341, 温湿度计, esp8266, lcd, 图形, esp8266, esp8266, esp8266, esp8266, esp8266, esp8266, esp8266, esp8266, esp8266, esp8266, esp8266, esp8266
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
x
打赏
-
查看全部打赏
|