项目制作背景
智能家居是现在很多家庭都想有的智能设备。例如晚上房子外的门口灯没有关,都已经躺在床上了,又不想起床去关灯。家里楼层多,用电器也是没有关好,也不想每层的走一次去关。为解决这个事情。我设计一款可以用手机APP远程遥控的智能家居系统。
制作步骤如下
1、在CAD中绘制好激光切割建模的模型图纸。
二、用激光切割机切割出来后进行外观组装。
三、用焊机和杜邦线焊接电机。
四,电路组装和调试。
5、电路系统与外观结合组装。
6、用Arduino编写程序进行电路测试。
7、基本电路测试完成后,继续完成电路的组装,直至全部电路完成。
8、用Mind+编写人工智能哈士奇人工智能摄像头人脸识别,及语音控制和灯光控制程序。
9、用Arduino编写esp8266主板物联网程序。
10用巴法云平台获取智能家居获取的温度,湿度,光照度等数据。
11、获取周围环境光及温度的数据。
12、用APP Inventor 工具编写手机远程控制界面,可以实现远程遥控功能。
下面看最终展示效果。
作品使用材料清单。
1、esp8266主板2个。
2、arduino主板1个。
3、OLDE显示屏1个。
4、60灯灯带1条。
5、人工智能哈士奇摄像头1个。
6、语音播放模块1个。
7、喇叭模块1个。
8、舵机模块1个。
9、8路继电器模块1个。
10、电机3个。
11、光线传感器1个。
12、温湿度传感器1个。
13、OLDE灯两个。
14、电源2个。
15、杜邦线若干。
16激光切割木板若干。
13、下面是激光切割图纸和编程代码。
#define MAX_PACKETSIZE 512
#define KEEPALIVEATIME 30*1000
WiFiClient TCPclient;
String TcpClient_Buff = "";
unsigned int TcpClient_BuffIndex = 0;
unsigned long TcpClient_preTick = 0;
unsigned long preHeartTick = 0;
unsigned long preTCPStartTick = 0;
bool preTCPConnected = false;
bool subFlag = false;
void doWiFiTick();
void doTCPClientTick();
void sendtoTCPServer(String p);
void subTopic(String topic){
String tcpTemp="";
tcpTemp = "cmd=1&uid="+UID+"&topic="+topic+"\r\n";
sendtoTCPServer(tcpTemp);
tcpTemp="";
Serial.print("sub topic:");Serial.println(topic);
}
void doWiFiTick(){
static bool taskStarted = false;
static uint32_t lastWiFiCheckTick = 0;
if ( WiFi.status() != WL_CONNECTED ) {
if (millis() - lastWiFiCheckTick > 1000) {
lastWiFiCheckTick = millis();
}
}
else {
if (taskStarted == false) {
taskStarted = true;
Serial.print("Get IP Address: ");
Serial.println(WiFi.localIP());
startTCPClient();
}
}
}
void sendtoTCPServer(String p){
if (!TCPclient.connected())
{
Serial.println("Client is not readly");
return;
}
TCPclient.print(p);
}
void startTCPClient(){
if(TCPclient.connect(TCP_SERVER_ADDR, atoi(TCP_SERVER_PORT))){
Serial.print("Connected to server:");
Serial.println(TCP_SERVER_ADDR);
subFlag = true;
preHeartTick = millis();
TCPclient.setNoDelay(true);
}
else{
Serial.print("Failed connected to server:");
Serial.println(TCP_SERVER_ADDR);
TCPclient.stop();
preTCPConnected = false;
}
preTCPStartTick = millis();
}
#include <DHT.h>
#include <SimpleTimer.h>
#include <U8g2lib.h>
#include <Wire.h>
String T;
String S;
String GX;
DHT dht12(12, 11);
SimpleTimer timer;
U8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0, U8X8_PIN_NONE);
void subTopicCenter(){
if(subFlag == true){
subFlag = false;
subTopic("lde2");
}
}
void doTCPClientTick(){
if(WiFi.status() != WL_CONNECTED) return;
if (!TCPclient.connected()) {
if(preTCPConnected == true){
preTCPConnected = false;
preTCPStartTick = millis();
Serial.println();
Serial.println("TCP Client disconnected.");
TCPclient.stop();
}
else if(millis() - preTCPStartTick > 1*1000)
startTCPClient();
}
else
{
if (TCPclient.available()) {
char c =TCPclient.read();
TcpClient_Buff +=c;
TcpClient_BuffIndex++;
TcpClient_preTick = millis();
if(TcpClient_BuffIndex>=MAX_PACKETSIZE - 1){
TcpClient_BuffIndex = MAX_PACKETSIZE-2;
TcpClient_preTick = TcpClient_preTick - 200;
}
preHeartTick = millis();
}
if(millis() - preHeartTick >= KEEPALIVEATIME){
preHeartTick = millis();
Serial.println("--Keep alive:");
sendtoTCPServer("ping\r\n");
}
}
if((TcpClient_Buff.length() >= 1) && (millis() - TcpClient_preTick>=200))
{
TCPclient.flush();
TcpClient_Buff.trim();
String topic = "";
String msg = "";
if(TcpClient_Buff.length() > 15){
int topicIndex = TcpClient_Buff.indexOf("&topic=")+7;
int msgIndex = TcpClient_Buff.indexOf("&msg=");
topic = TcpClient_Buff.substring(topicIndex,msgIndex);
msg = TcpClient_Buff.substring(msgIndex+5);
}
if (msg == "9") {
digitalWrite(13,HIGH);
}
if (msg == "10") {
digitalWrite(13,LOW);
}
msg = "";
topic = "";
TcpClient_Buff="";
TcpClient_BuffIndex = 0;
}
}
void publishMsg(String topic,String msg){
String tcpTemp="";
tcpTemp = "cmd=2&uid="+UID+"&topic="+topic+"&msg="+msg+"\r\n";
sendtoTCPServer(tcpTemp);
tcpTemp="";
Serial.println("A message has been published");
}
void Simple_timer_1() {
T = String(dht12.readTemperature());
publishMsg("led1", T);
}
void Simple_timer_3() {
S = String(dht12.readHumidity());
publishMsg("led3", S);
}
void Simple_timer_2() {
if (GX > "600") {
digitalWrite(13,HIGH);
} else {
digitalWrite(13,LOW);
}
}
void page1() {
u8g2.setFont(u8g2_font_timR10_tf);
u8g2.setFontPosTop();
u8g2.setCursor(5,10);
u8g2.print("wendu:");
u8g2.setCursor(50,10);
u8g2.print(T);
u8g2.setCursor(5,30);
u8g2.print("wendu:");
u8g2.setCursor(50,30);
u8g2.print(S);
u8g2.setCursor(5,50);
u8g2.print("gxzhi:");
u8g2.setCursor(50,50);
u8g2.print(GX);
}
void Simple_timer_4() {
GX = String(analogRead(A0));
publishMsg("gx", GX);
}
void setup(){
WiFi.begin("TP-LINK_6D5C", "15814598472");
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("Local IP:");
Serial.print(WiFi.localIP());
T = "";
S = "";
GX = "";
pinMode(13, OUTPUT);
dht12.begin();
timer.setInterval(1000L, Simple_timer_1);
timer.setInterval(1000L, Simple_timer_3);
u8g2.setI2CAddress(0x3C*2);
u8g2.begin();
timer.setInterval(1000L, Simple_timer_2);
u8g2.enableUTF8Print();
pinMode(A0, INPUT);
timer.setInterval(1000L, Simple_timer_4);
}
void loop(){
doWiFiTick();
doTCPClientTick();
subTopicCenter();
u8g2.firstPage();
do
{
page1();
}while(u8g2.nextPage());
timer.run();
}
0L6t0KVTVzIZ2024.10.25
6
罗罗罗2024.10.14
666
腿毛利小五郎2023.03.02
666
花生编程2023.01.20
厉害赞
三春牛-创客2022.12.30
厉害
三春牛-创客2022.12.30
666
豆爸2022.11.26
666