TOPWAY 7寸智能屏打造家庭小中控试用体验

拓普微智能TFT液晶显示模块HMT070ETD-1D,带电容触摸的7寸智能显示模块,支持网络更新界面,以及通过互联网控制、查询TFT显示状态,十分适合 IoT 应用场景。

开箱,话不多说,直接上照

千字试用 | TOPWAY 7寸智能屏制作家庭小中控的图2

千字试用 | TOPWAY 7寸智能屏制作家庭小中控的图3千字试用 | TOPWAY 7寸智能屏制作家庭小中控的图4千字试用 | TOPWAY 7寸智能屏制作家庭小中控的图5千字试用 | TOPWAY 7寸智能屏制作家庭小中控的图6千字试用 | TOPWAY 7寸智能屏制作家庭小中控的图7千字试用 | TOPWAY 7寸智能屏制作家庭小中控的图8

查看手册了解到,这块智能屏竟然支持网口控制。那我们直接使用屏幕、网线配合家庭服务器,搭建一个家庭智能中控,监测家中各项环境指标(暂且为温湿度+光照),曲线显示,配合控制自制的无线开关。




敢单介绍

  • ① 服务器开发(打算挑战一下自己用QT或者失败用C#)
  • ② 智能屏的UI及逻辑设计
  • ③ 家庭环境采集(用的是我之前设计的采集卡)
  • ④ 无线开关控制(也是之前设计的无线开关)



设置背景图

照着教程捋一捋。先去网上找个1024*600分辨率的图片,另存为BMP文件,最好是24位的。



1、新建工程


打开软件新建工程:

千字试用 | TOPWAY 7寸智能屏制作家庭小中控的图10


导入个背景图:

千字试用 | TOPWAY 7寸智能屏制作家庭小中控的图11

分辨率不够还会自动调整:

千字试用 | TOPWAY 7寸智能屏制作家庭小中控的图12

选中背景图:

千字试用 | TOPWAY 7寸智能屏制作家庭小中控的图13


千字试用 | TOPWAY 7寸智能屏制作家庭小中控的图14




2、编译下载

下载程序需要注意,需要先断电(DC口的电源),然后连接USB:

千字试用 | TOPWAY 7寸智能屏制作家庭小中控的图15

先编译再下载:

千字试用 | TOPWAY 7寸智能屏制作家庭小中控的图16

下载即可:

千字试用 | TOPWAY 7寸智能屏制作家庭小中控的图17


千字试用 | TOPWAY 7寸智能屏制作家庭小中控的图18



发送数字到智能屏


接下来,实现个QT的TCP连接,发送数字到智能屏。


先整下屏幕设置屏幕IP设置:

千字试用 | TOPWAY 7寸智能屏制作家庭小中控的图19

添加个数字控件:

千字试用 | TOPWAY 7寸智能屏制作家庭小中控的图20


千字试用 | TOPWAY 7寸智能屏制作家庭小中控的图21

下载默认是0。




1、QT操作建立新工程

先设计个UI:

千字试用 | TOPWAY 7寸智能屏制作家庭小中控的图22

引用网络:

千字试用 | TOPWAY 7寸智能屏制作家庭小中控的图23

添加socket库:

千字试用 | TOPWAY 7寸智能屏制作家庭小中控的图24

初始化套接字:

千字试用 | TOPWAY 7寸智能屏制作家庭小中控的图25


千字试用 | TOPWAY 7寸智能屏制作家庭小中控的图26

新建头文件添加发送结构体:

千字试用 | TOPWAY 7寸智能屏制作家庭小中控的图27

添加大小端转换函数(QT和屏幕大小端不同):

千字试用 | TOPWAY 7寸智能屏制作家庭小中控的图28

添加两个按键函数:

千字试用 | TOPWAY 7寸智能屏制作家庭小中控的图29

编译运行一气呵成:

千字试用 | TOPWAY 7寸智能屏制作家庭小中控的图30



2、测试千字试用 | TOPWAY 7寸智能屏制作家庭小中控的图31

对比指令正确,同时屏幕数字发生变化,直接芜湖



3、优化了界面,使之对齐

QT的拖拽操作没有C#的好用,QT没有对齐参考线,在搞对齐时有点烦人

千字试用 | TOPWAY 7寸智能屏制作家庭小中控的图33





编辑主界面


控件使用情况:日期时间、进度条、两种表盘、静态图标、静态字符串、数字、触摸键。
千字试用 | TOPWAY 7寸智能屏制作家庭小中控的图34

其中发现了一个问题,表盘以及进度条的范围都不支持有符号数吗?



QT添加测试功能及校时功能

千字试用 | TOPWAY 7寸智能屏制作家庭小中控的图35

校时代码如下:

struct WRITE_TIME  {    u8  head; //帧头    u8  cmd;  //命令    u8  year; //年    u8  month;//月    u8  day;  //日    u8  hour; //时    u8  min;  //分    u8  sec;  //秒    u32 tail; //帧尾  };  void eepw_central::on_pushButton_clicked()  {      QTime time = QTime::currentTime();      QDate date = QDate::currentDate();      struct WRITE_TIME write_time;      write_time.head = 0xaa;      write_time.cmd  = 0x9c;      write_time.year = date.year()-2000;      write_time.month = date.month();      write_time.day = date.day();      write_time.hour = time.hour();      write_time.min = time.minute();      write_time.sec = time.second();      write_time.tail = BLEndianUint32(0xcc33c33c);//大小端转换      QByteArray data;      data.resize(sizeof(struct WRITE_TIME));      memcpy(data.data(), &write_time, sizeof(struct WRITE_TIME));      //向服务器发数据      mSocket->connectToHost("192.168.2.10",1234);//连接智能屏      mSocket->write(data);      mSocket->disconnectFromHost();//断开连接      #if debug      testSocket->write(data);      #endif  }




WiFi开关控制

用的是ESP8266,直接wifi接入局域网,连接服务器,获取服务器转发命令即可控制。

#include <ESP8266WiFi.h>  WiFiClient client;  const char* ssid     = "****";       // 连接WiFi名                                const char* password = "****";  // 连接WiFi密码  const char *host = "192.168.2.19";  const int httpPort = 9999;  // the setup function runs once when you press reset or power the board  void setup() {    // initialize digital pin LED_BUILTIN as an output.    Serial.begin(115200);// 初始化串口    pinMode(LED_BUILTIN, OUTPUT);    connectWiFi();    while (!client.connect(host, httpPort))     {      Serial.println("connection failed");    }  }  // the loop function runs over and over again forever  void loop() {    while (client.connected() || client.available())    {       if (client.available())      {        String line = client.readStringUntil('\n');        Serial.println(line);        if(line == "000")        {          digitalWrite(LED_BUILTIN, HIGH);   // turn the LED on (HIGH is the voltage level)          }        else if(line == "111")        {          digitalWrite(LED_BUILTIN, LOW);    // turn the LED off by making the voltage LOW         }      }    }    if(!client.connected())    {      while (!client.connect(host, httpPort))       {        Serial.println("connection failed");      }    }  }  // 连接WiFi  void connectWiFi(){    WiFi.begin(ssid, password);                  // 启动网络连接    Serial.print("Connecting to ");              // 串口监视器输出网络连接信息    Serial.print(ssid); Serial.println(" ...");  // 告知用户NodeMCU正在尝试WiFi连接    int i = 0;                                   // 这一段程序语句用于检查WiFi是否连接成功    while (WiFi.status() != WL_CONNECTED) {      // WiFi.status()函数的返回值是由NodeMCU的WiFi连接状态所决定的。    delay(1000);                               // 如果WiFi连接成功则返回值为WL_CONNECTED                             Serial.print(i++); Serial.print(' ');      // 此处通过While循环让NodeMCU每隔一秒钟检查一次WiFi.status()函数返回值    }                                            // 同时NodeMCU将通过串口监视器输出连接时长读秒。                                               // 这个读秒是通过变量i每隔一秒自加1来实现的。  Serial.println("");                          // WiFi连接成功后    Serial.println("Connection established!");   // NodeMCU将通过串口监视器输出"连接成功"信息。  Serial.print("IP address:    ");             // 同时还将输出NodeMCU的IP地址。这一功能是通过调用    Serial.println(WiFi.localIP());              // WiFi.localIP()函数来实现的。该函数的返回值即NodeMCU的IP地址。}


采集端使用的是之前G070板卡现成的代码,前文地址如下:

http://forum.eepw.com.cn/thread/346099/1



成果展示

千字试用 | TOPWAY 7寸智能屏制作家庭小中控的图36

展示视频:

https://www.bilibili.com/video/bv1e64y1x7Qp


文中代码下载:

http://share.eepw.com.cn/share/download/id/388889



免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删

QR Code
微信扫一扫,欢迎咨询~

联系我们
武汉格发信息技术有限公司
湖北省武汉市经开区科技园西路6号103孵化器
电话:155-2731-8020 座机:027-59821821
邮件:tanzw@gofarlic.com
Copyright © 2023 Gofarsoft Co.,Ltd. 保留所有权利
遇到许可问题?该如何解决!?
评估许可证实际采购量? 
不清楚软件许可证使用数据? 
收到软件厂商律师函!?  
想要少购买点许可证,节省费用? 
收到软件厂商侵权通告!?  
有正版license,但许可证不够用,需要新购? 
联系方式 155-2731-8020
预留信息,一起解决您的问题
* 姓名:
* 手机:

* 公司名称:

姓名不为空

手机不正确

公司不为空