admin管理员组

文章数量:1591683

1、环境搭建

本次主要是用ArduinoIDE平台来进行开发,可以去官网进行下载:Arduino - Home

也可去网盘下载,在这里为大家准备了网盘连接:

链接:https://pan.baidu/s/1VLn8Iju1fYWO1PMay8GsEw 
提取码:1502

打开软件后,进行以下设置(注意:USB尽量用51开发板的线,普通的USB线可能会有问题)这样我们的环境就搭建好了

2、智能垃圾桶

简介:通过超声波来控制舵机。然后通过外部设备来进行配合,很简单

首先我们要准备以下几件东西:

                   

                        超声波                     

 

                        开发板

               

                         mini垃圾桶 

   

                         Sg90舵机

 下面就到了核心部分:代码编写(开源)

#include <Servo.h>

//I/O口定义

#define pwm  D5
#define Echo D2
#define Trig D8

Servo myduoji;

long getTime()
{
  digitalWrite(Trig,HIGH);
  delayMicroseconds(10);
  digitalWrite(Trig,LOW);

   return pulseIn(Echo,HIGH);
}

void initChaoShengBo()
{
  pinMode(Echo,INPUT);
  pinMode(Trig,OUTPUT);  
}
void setup() 
{
  // put your setup code here, to run once:
  initChaoShengBo();
  myduoji.attach(pwm); 
  Serial.begin(115200);
}

void loop() 
{
  //获取距离
  long dis;
  dis = getTime()/58;
  if(dis <= 10) //距离小于等于10
  {
    myduoji.write(90);  //舵机转动90°
    delay(2000);
  }
 else
 {
   myduoji.write( 180);
 }
  
}

 3、智能家居,让你关灯不再手动

众所周知,esp8266具有上网功能,那么我们就可以通过手机语音助手打开浏览器网页来控制舵机,废话不多说,直接上代码(造轮子)


#include <ESP8266WiFi.h>
#include <Servo.h>
  
const char *ssid = "gcc";  //家里的wifi名称或者手机热点名称
const char *password = "15388515437";//家里的wifi密码或者手机热点密码
 
WiFiServer server(80); //通过80端口连接到wemos D1
 
String readString = ""; //建立一个字符串对象用来接收存放来自客户的数据
 
//响应头
String responseHeaders =
    String("") +
    "HTTP/1.1 200 OK\r\n" +
    "Content-Type: text/html\r\n" +
    "Connection: close\r\n" +
    "\r\n";
 
//网页:HTML+JS的网页,当客户端(即浏览器)发送链接请求时,Wemos则通过路由器发送网页
String myhtmlPage =
    String("") +
    "<html>" +
    "<head>" +
    "    <title>Wemos D1 Web Server Test</title>" + 
    "    <meta charset = \"UTF-8\">" + 
    "    <script defer=\"defer\">" +
    "        function ledSwitch() {" +
    "            var xmlhttp;" +
    "            if (window.XMLHttpRequest) {" +
    "                xmlhttp = new XMLHttpRequest();" +
    "            } else {" +
    "                xmlhttp = new ActiveXObject(\"Microsoft.XMLHTTP\");" +
    "            }" +
    "            xmlhttp.onreadystatechange = function () {" +
    "                if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {" +
    "                    document.getElementById(\"txtState\").innerHTML = xmlhttp.responseText;" +
    "                }" +
    "            }," +
    "            xmlhttp.open(\"GET\", \"Switch\", true);" +
    "            xmlhttp.send(); " +
    "        }" +
    "    </script>" +
    "</head>" +
    "<body><center>" +
    "    <div id=\"txtState\">unknown</div>" +
    "    <input type=\"button\" value=\"开关\" οnclick=\"ledSwitch()\"></center>" +
    "</body>" +
    "</html>";
 
bool isLedTurnOpen = false; // 记录舵机状态

Servo myservo;

void setup()
{
    myservo.attach(D5);  //将舵机与D5引脚连接
    myservo.write(0);  //舵机转动0°
    
    Serial.begin(115200);  //启动串口通信,波特率为115200
    Serial.println();
 
    Serial.printf("Connecting to %s ", ssid);  //通过串口在PC打印连接到路由器
    WiFi.begin(ssid, password);  //连接到路由器
    while (WiFi.status() != WL_CONNECTED)  //wifi如果没连接成功,则一直在此循环
    {
        delay(500);   
        Serial.print(".");  //每隔0.5s打印一个点.
    }
    Serial.println(" connected");   //“连接成功”打印
 
    server.begin();   //服务器启动
    Serial.printf("Web server started, open %s in a web browser\n", WiFi.localIP().toString().c_str());    //打印连接到路由器分配到的ip
}
 
void loop()
{
    WiFiClient client = server.available(); //尝试建立客户对象
    if (client)                             //如果当前有客户可用
    {
        boolean currentLineIsBlank = true;
        Serial.println("[Client connected]");
 
        while (client.connected()) //如果客户端建立连接
        {
            if (client.available()) //等待有可读数据
            {
                char c = client.read(); //读取一字节数据
                readString += c;        //拼接数据
                /************************************************/
                if (c == '\n') //等待请求头接收完成(接收到空行)
                {
                    //比较接收到的请求数据
                    if (readString.startsWith("GET / HTTP/1.1")) //如果是网页请求
                    {
                        client.print(responseHeaders); //向客户端输出网页响应
                        client.print(myhtmlPage);      //向客户端输出网页内容
                        client.print("\r\n");
                    }
                    else if (readString.startsWith("GET /Switch")) //如果是改变舵机状态请求
                    {
                        if (isLedTurnOpen == false)
                        {
                            myservo.write(170); //舵机的转动角度
                  
                            client.print("电灯已经开启,按下可关闭");
                            isLedTurnOpen = true;
                        }
                        else
                        {  
                            myservo.write(90);
                            client.print("电灯已经关闭,按下可开启");
                            isLedTurnOpen = false;
                        }
                    }
                   
                    else
                    {
                        client.print("\r\n");
                    }
                    break;
                }
 
                if (c == '\n')
                {
                    currentLineIsBlank = true; //开始新行
                }
                else if (c != '\r')
                {
                    currentLineIsBlank = false; //正在接收某行中
                }
                /************************************************/
            }
        }
        delay(1);      //等待客户完成接收
        client.stop(); //结束当前连接:
        Serial.println("[Client disconnected]");
 
        Serial.println(readString); //打印输出来自客户的数据
        readString = "";
    }
}

最终成效:基于esp8266 arduino WeMos D1智能垃圾桶及借助手机语音助手的智能家居_哔哩哔哩_bilibili

大家可以根据自己所在环境进行建模,3D打印一个舵机支架

以上就是本次的全部内容,欢迎大家评论,收藏和转发,如有问题请私信或评论

本文标签: 垃圾桶智能家居智能Wemos