最近这段时间忙着做一个硬件通知接收器,又重新点燃了我的电子制作的兴趣,买了很多的电子原件,包括第一次尝试使用嘉立创的打版工作,制作了几块电路板,我本身没有手机不离手的习惯,所以有很多消息通知我都不能及时接收到,以至于错过了很多重要的通知,比如服务器受到攻击,Mysql下线,redis爆内存…之前使用server酱,里面有一个开源的PushDeer的lot硬件项目,挺适合长时间在电脑旁的我,怎奈人家淘宝店铺下架了产品,于是就开始想手动攒一个起来,但是我没有采用他的方案,因为手里有一块esp32的板子,使用Arduino就直接做了个原型。
#include <Arduino.h>
#include <PubSubClient.h>
#include "config.h"
#include "function.h"
#include <SPI.h>
#include <FS.h>
#include <SPIFFS.h>
#include <TFT_eSPI.h>
#include <ezTime.h>
// 获取时间
Timezone myTZ;
TFT_eSPI tft = TFT_eSPI(); // 创建TFT对象
void setup()
{
Serial.begin(115200); // 初始化串口
// 指示灯引脚
pinMode(led, OUTPUT);
pinMode(buzzer, OUTPUT);
pinMode(boot, INPUT_PULLUP);
pinMode(BL, OUTPUT);
digitalWrite(buzzer, HIGH);
// 初始化显示屏
lcdShow();
// 连接wifi
tft.println("连接wifi...");
connectWifi();
// 连接mqtt代理
tft.println("连接MQTT代理...");
firstConnectMqtt();
// 初始化时间
tft.println("初始化时间...");
myTZ.setLocation(F("Asia/Shanghai")); // 设置时区
ezt::setServer("ntp1.aliyun.com"); // 设置NTP服务器
waitForSync(); // 等待时间同步
tft.println("初始化完成...");
// 清除屏幕
tft.setCursor(0, 0);
tft.fillScreen(TFT_BLACK);
tft.println("等待接收消息...");
isShowWaitReceive = true;
showWaitReceiveTime = millis();
// 峰鸣器通知成功
buzzerStart(1);
startTime = millis(); // 记录启动时间
}
void bootPush(){
if (digitalRead(boot) == LOW)
{
Serial.println("BOOT 被按下!");
tft.setCursor(0, 0);
// 清除屏幕
tft.fillScreen(TFT_BLACK);
isShowWaitReceive = false;
if (screenStatus == true)
{
screenStatus = false;
digitalWrite(BL, LOW);
}
else
{
screenStatus = true;
digitalWrite(BL, HIGH);
tft.println("等待接收消息...");
isShowWaitReceive = true;
showWaitReceiveTime = millis();
}
}
delay(260); // 简单的去抖动延时
}
void loop()
{
// 如果wifi连接断开,重新连接wifi
if (WiFi.status() != WL_CONNECTED)
{
Serial.println("Wifi连接断开, 尝试重新连接...");
connectWifi();
}
// 如果mqtt连接断开,重新连接mqtt
if (!client.connected())
{
Serial.println("MQTT broker连接失败, 尝试重新连接...");
reconnect();
}
client.loop();
// 检测是否按下 - 按钮按下时通常连接到地,所以是低电平
bootPush();
// 如果屏幕开启,根据背光时间关闭屏幕
if (isShowWaitReceive == true && millis() - showWaitReceiveTime > screenWaitTime)
{
digitalWrite(BL, LOW);
screenStatus = false;
isShowWaitReceive = false;
}
}
感觉还不错,在任何地方,只要请求我的一个通用通知接口,手机和设备就能同时收到消息,能很好的达到我的要求,已经能实现基本的要求了,如果再要精细一点,就再打一块小板,将模块组合起来,再用3D打印机打一个壳子,加块电池就能使用了。
虽然是个很小的尝试,但是却激起了我很大的激情,几年前就答应丸子要给他做一个遥控汽车,由于一直没有太长的时间去学着做,所以跳票了好几年,为此还闹过几次,今年寒假,一定要完成这个项目,为此准备了很多元件,然后就是自己的一些知识储备,现在自媒体时代,我也想学着通过视频记录这些,感觉有太多东西要学。
由于我目前其实是自由职业状态,好早之前我其实就想通过这些小电子制作,能跳出我现有的圈子,能拓展出我的第二块业务,因为这是我喜欢热爱的,我相信自己肯定可以做好。
很有意思,想起以前实习的时候我们一个领导让我跟着学硬件我还不乐意,想在想来错失了一个机会。