这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 活动中心 » 板卡试用 » 【TOPWAY7寸智能屏】家庭智能中控(已完成)

共13条 1/2 1 2 跳转至

【TOPWAY7寸智能屏】家庭智能中控(已完成)

高工
2021-07-14 22:27:05     打赏

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

敢单介绍

1.服务器开发(打算挑战一下自己用QT或者失败用C#)

2.智能屏的UI及逻辑设计

3.家庭环境采集(用的是我之前设计的采集卡)

4.无线开关控制(也是之前设计的无线开关)



高工
2021-07-14 22:27:21     打赏
2楼

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

体验就俩字 牛畅!


高工
2021-07-14 22:27:27     打赏
3楼
先照着教程捋一捋先去网上找个1024*600分辨率的图片,另存为BMP文件,最好是24位的

新建工程

打开软件新建工程

导入个背景图

分辨率不够还会自动调整

选中背景图

编译下载

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

先编译再下载

下载即可

徐福


高工
2021-07-14 22:27:31     打赏
4楼

今天实现个QT TCP连接发送数字到智能屏

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

添加个数字控件


下载默认是0


QT操作建立新工程(不细写了)

先设计个UI


引用网络


添加socket库


初始化套接字


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


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


添加两个按键函数


编译运行一气呵成


测试



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


优化了界面,使之对齐

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



高工
2021-07-14 22:27:36     打赏
5楼

主界面

控件使用情况:日期时间 进度条 两种表盘 静态图标 静态字符串 数字 触摸键

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

展示一波金主们(主界面点击跳转)

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

附加一个校时代码

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
}



高工
2021-07-14 22:27:40     打赏
6楼

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地址。  
}



高工
2021-07-14 22:27:45     打赏
7楼

采集端我使用的是之前G070板卡现成的代码

如有需要直接点击 STM32G070RB探测0-汇总帖

 


高工
2021-07-14 22:28:01     打赏
8楼

召唤神龙层

全家福

视频

(家庭小中控)EEPW-TOPWAY智能屏使用活动_哔哩哔哩_bilibili

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

打包代码

EEPW_TOPWAY_shihengrui.zip


管理员
2021-07-15 09:30:27     打赏
9楼

期待


院士
2021-07-16 09:31:18     打赏
10楼

楼主的主题真是丰富了


共13条 1/2 1 2 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]