这块智能屏竟然支持网口控制,那我们直接使用屏幕、网线配合家庭服务器,搭建一个家庭智能中控,监测家中各项环境指标(暂且为温湿度+光照),曲线显示,配合控制自制的无线开关。
敢单介绍
1.服务器开发(打算挑战一下自己用QT或者失败用C#)
2.智能屏的UI及逻辑设计
3.家庭环境采集(用的是我之前设计的采集卡)
4.无线开关控制(也是之前设计的无线开关)
这块智能屏竟然支持网口控制,那我们直接使用屏幕、网线配合家庭服务器,搭建一个家庭智能中控,监测家中各项环境指标(暂且为温湿度+光照),曲线显示,配合控制自制的无线开关。
敢单介绍
1.服务器开发(打算挑战一下自己用QT或者失败用C#)
2.智能屏的UI及逻辑设计
3.家庭环境采集(用的是我之前设计的采集卡)
4.无线开关控制(也是之前设计的无线开关)
打开软件新建工程
导入个背景图
分辨率不够还会自动调整
选中背景图
编译下载下载程序需要注意,需要先断电(DC口的电源),然后连接USB
先编译再下载
下载即可
徐福
今天实现个QT TCP连接发送数字到智能屏
先整下屏幕设置屏幕IP设置
添加个数字控件
下载默认是0
QT操作建立新工程(不细写了)
先设计个UI
引用网络
添加socket库
初始化套接字
新建头文件添加发送结构体
添加大小端转换函数(QT和屏幕大小端不同)
添加两个按键函数
编译运行一气呵成
测试
对比指令正确,同时屏幕数字发生变化,直接芜湖
优化了界面,使之对齐
qt的拖拽操作没有C#的好用,QT没有对齐参考线,在搞对齐时有点烦人
主界面
控件使用情况:日期时间 进度条 两种表盘 静态图标 静态字符串 数字 触摸键
其中发现了一个问题,表盘以及进度条的范围都不支持有符号数吗?
展示一波金主们(主界面点击跳转)
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 }
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地址。 }
召唤神龙层
全家福
视频
(家庭小中控)EEPW-TOPWAY智能屏使用活动_哔哩哔哩_bilibili
https://www.bilibili.com/video/bv1e64y1x7Qp
打包代码
有奖活动 | |
---|---|
【有奖活动】分享技术经验,兑换京东卡 | |
话不多说,快进群! | |
请大声喊出:我要开发板! | |
【有奖活动】EEPW网站征稿正在进行时,欢迎踊跃投稿啦 | |
奖!发布技术笔记,技术评测贴换取您心仪的礼品 | |
打赏了!打赏了!打赏了! |
打赏帖 | |
---|---|
【换取逻辑分析仪】自制底板并驱动ArduinoNanoRP2040ConnectLCD扩展板被打赏47分 | |
【分享评测,赢取加热台】RISC-V GCC 内嵌汇编使用被打赏38分 | |
【换取逻辑分析仪】-基于ADI单片机MAX78000的简易MP3音乐播放器被打赏48分 | |
我想要一部加热台+树莓派PICO驱动AHT10被打赏38分 | |
【换取逻辑分析仪】-硬件SPI驱动OLED屏幕被打赏36分 | |
换逻辑分析仪+上下拉与多路选择器被打赏29分 | |
Let'sdo第3期任务合集被打赏50分 | |
换逻辑分析仪+Verilog三态门被打赏27分 | |
换逻辑分析仪+Verilog多输出门被打赏24分 | |
【分享评测,赢取加热台】使用8051单片机驱动WS2812被打赏40分 |