From fe15fa7593c3055b05e330a826852818c1a33dd0 Mon Sep 17 00:00:00 2001 From: Easy Date: Fri, 22 Apr 2022 13:57:14 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=B5=8B=E8=AF=95=E7=94=A8?= =?UTF-8?q?=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- iot/deeresp32/deeresp32.ino | 61 ++++++++++++------ iot/deeresp_test/data/cover.jpeg | Bin 0 -> 24197 bytes iot/deeresp_test/deeresp_test.ino | 103 ++++++++++++++++++++++++++++++ 3 files changed, 146 insertions(+), 18 deletions(-) create mode 100644 iot/deeresp_test/data/cover.jpeg create mode 100644 iot/deeresp_test/deeresp_test.ino diff --git a/iot/deeresp32/deeresp32.ino b/iot/deeresp32/deeresp32.ino index 51eab12..09c34af 100644 --- a/iot/deeresp32/deeresp32.ino +++ b/iot/deeresp32/deeresp32.ino @@ -1,5 +1,9 @@ +#define SCREEN_WIDTH 128 +#define SCREEN_HEIGHT 128 +#define SCREEN_ROTATION 0 #define DOWNLOADED_IMG "/download.jpg" -#define FULL_FONT 1 +// #define FULL_FONT 1 +// #define CHINESE_FONT 1 #define BLK_PIN 19 #define BTN_PIN 0 @@ -37,15 +41,14 @@ String mqtt_password_value = ""; //); EspMQTTClient mclient; -if(FULL_FONT==1) -{ - #define AA_FONT_CUBIC "Cubic1112" +#ifdef CHINESE_FONT + #ifdef FULL_FONT + #define AA_FONT_CUBIC "Cubic1112" + #else + #include "cubic_12.h" + #endif +#endif -} -else -{ - #include "cubic_12.h" -} // #include "SPI.h" #include @@ -125,6 +128,7 @@ void setup() { // 检测本地配置文件 if( SPIFFS.exists( "/config.json" ) ) { + Serial.println("config.json exist"); fileSystem.openFromFile("/config.json", jsonDocument); Serial.print("JSON Document is: "); serializeJson(jsonDocument, Serial); @@ -145,6 +149,7 @@ void setup() { }else { + Serial.println("config.json not exist"); tft.fillScreen( TFT_BLACK ); tft.setCursor(0, 0, 1); tft.println("Connect to DeerEspWiFi, go 192.168.4.1"); @@ -213,7 +218,12 @@ void setup() { serializeJson(jsonDocument, Serial); Serial.println(); -// File root = SPIFFS.open("/"); + if(SPIFFS.exists("/config.json")) Serial.print("config.json exists "); + else Serial.print("config.json not exists "); + + + +// File root = SPIFFS.open("/","r"); // // File file = root.openNextFile(); // @@ -255,7 +265,7 @@ String getParam(String name){ void onConnectionEstablished() { Serial.println("connected"); - tft.fillScreen(TFT_BLACK);tft.setTextColor(0xFFFF,0x0000);tft.setCursor(0, 0, 1);tft.println("Waiting for messages ..."); + tft.fillScreen(TFT_BLACK);tft.setTextColor(0xFFFF,0x0000);tft.setCursor(0, 0, 1);tft.println("Waiting for messages at "+mqtt_topic_value+"..."); mclient.subscribe(mqtt_topic_value+"_text", [] (const String &payload) { @@ -264,10 +274,12 @@ void onConnectionEstablished() if (SPIFFS.exists(DOWNLOADED_IMG) == true) TJpgDec.drawFsJpg(0, 0, DOWNLOADED_IMG); else tft.fillScreen( TFT_BLACK ); - #ifdef FULL_FONT - tft.loadFont(AA_FONT_CUBIC); - #else - tft.loadFont(cubic_11); + #ifdef CHINESE_FONT + #ifdef FULL_FONT + tft.loadFont(AA_FONT_CUBIC); + #else + tft.loadFont(cubic_11); + #endif #endif @@ -288,7 +300,10 @@ void onConnectionEstablished() } - tft.unloadFont(); + #ifdef CHINESE_FONT + tft.unloadFont(); + #endif + show_time(true); @@ -344,8 +359,18 @@ void show_time(bool force) void echo_time( String thetime ) { - tft.setCursor(96, 120, 1); - tft.setTextSize(1); + if( SCREEN_WIDTH == 128 ) + { + tft.setCursor(96, 120, 1); + tft.setTextSize(1); + + } + if( SCREEN_WIDTH == 240 ) + { + tft.setCursor(180, 210, 1); + tft.setTextSize(2); + + } tft.setTextColor(TFT_WHITE,TFT_BLACK); tft.println(thetime); diff --git a/iot/deeresp_test/data/cover.jpeg b/iot/deeresp_test/data/cover.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..d025ea841bc8e08207d4ed3d97210124fc817592 GIT binary patch literal 24197 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 literal 0 HcmV?d00001 diff --git a/iot/deeresp_test/deeresp_test.ino b/iot/deeresp_test/deeresp_test.ino new file mode 100644 index 0000000..a896f9c --- /dev/null +++ b/iot/deeresp_test/deeresp_test.ino @@ -0,0 +1,103 @@ +#define WIFI_SSID "wifi名称" +#define WIFI_PASSWORD "wifi密码" +#define SCREEN_WIDTH 240 + + +#define BEEP_BTN PIN_D0 +#define IMG_BTN PIN_D6 + +#define BEEP_PIN PIN_D8 // 蜂鸣器 + +#include +#include +TFT_eSPI tft = TFT_eSPI(); + +#include +#include +EasyButton beep_btn(BEEP_BTN); +EasyButton image_btn(IMG_BTN); + +void setup() { + Serial.begin(115200); + + WiFi.begin(WIFI_SSID, WIFI_PASSWORD); + + beep_btn.begin(); + beep_btn.onPressed(beep); + + image_btn.begin(); + image_btn.onPressed(show_image); + + tft.begin(); + + tft.fillScreen(TFT_BLACK); + tft.setTextColor(0xFFFF,0x0000);tft.setCursor(0, 0, 1);tft.setTextSize(1);tft.println("Init ..."); + Serial.println("tft init"); + + if (!SPIFFS.begin()) { + Serial.println("SPIFFS initialisation failed!"); + while (1) yield(); // Stay here twiddling thumbs waiting + } + Serial.println("SPIFFS init"); + tft.println("SPIFFS init ..."); + + if( SCREEN_WIDTH == 128 ) + { + TJpgDec.setJpgScale(2); + } + + TJpgDec.setSwapBytes(true); + TJpgDec.setCallback(tft_output); + + Serial.println("TJpgDec init"); + tft.println("TJpgDec init ..."); + + if( WiFi.status() == WL_CONNECTED ) + tft.println("Wifi connected ..."); + + tft.println("Press button ..."); + + + +} + +void loop() { + // put your main code here, to run repeatedly: + beep_btn.read(); + image_btn.read(); +} + +void beep() +{ + tone(BEEP_PIN, 1000, 100); + if (SPIFFS.exists("/cover.jpeg") == true) { + TJpgDec.drawFsJpg(0, 0, "/cover.jpeg"); + }else + { + tft.fillScreen(TFT_BLACK); + } + tft.setCursor(0, 0, 1); + tft.println("beep button Pressed ..."); + if( WiFi.status() == WL_CONNECTED ) + tft.println("Wifi connected ..."); + +} + +void show_image() +{ + if (SPIFFS.exists("/cover.jpeg") == true) { + TJpgDec.drawFsJpg(0, 0, "/cover.jpeg"); + } + tft.setCursor(0, 0, 1); + tft.println( "image button Pressed ..."); + if( WiFi.status() == WL_CONNECTED ) + tft.println("Wifi connected ..."); + +} + +bool tft_output(int16_t x, int16_t y, uint16_t w, uint16_t h, uint16_t* bitmap) +{ + if ( y >= tft.height() ) return 0; + tft.pushImage(x, y, w, h, bitmap); + return 1; +}