查看: 36270|回复: 18

基于esp8266的智能家居控制系统-通用篇

[复制链接]
  • TA的每日心情
    慵懒
    2018-11-12 08:58
  • 签到天数: 37 天

    [LV.5]常住居民I

    发表于 2015-10-28 20:09 | 显示全部楼层 |阅读模式
    本帖最后由 跑龙套的保 于 2017-3-12 21:27 编辑

    通过上一篇帖子的学习,我们发现用arduino ide开发esp8266的GPIO和其他功能和开发uno没有多大区别。uno能实现的功能他大多都能实现,这里就不一赘述了,甚至于还出现了这样的开发板
    TB2bgf6tVXXXXc1XXXXXXXXXXXX_!!1712400798.jpg

    esp8266主要一个wifi通讯方案,我侧重发WiFi通讯的知识,下面我附上几个常见的传感器和通讯方式示例
    1.DH11:

    kittenblock中小学创客名师推荐的图形化编程软件

    #include <dht.h>
    
    // 
    //   FILE:  dht_test.pde
    // PURPOSE: DHT library test sketch for Arduino
    //
    
    
    dht DHT;
    
    #define DHT11_PIN 4//put the sensor in the digital pin 4
    
    
    void setup()
    {
      Serial.begin(115200);
      Serial.println("DHT TEST PROGRAM ");
      Serial.print("LIBRARY VERSION: ");
      Serial.println(DHT_LIB_VERSION);
      Serial.println();
      Serial.println("Type,\tstatus,\tHumidity (%),\tTemperature (C)");
    }
    void loop()
    {
      // READ DATA
      Serial.print("DHT11, \t");
     int chk = DHT.read11(DHT11_PIN);
      switch (chk)
      {
        case 0:  Serial.print("OK,\t"); break;
        case -1: Serial.print("Checksum error,\t"); break;
        case -2: Serial.print("Time out error,\t"); break;
        default: Serial.print("Unknown error,\t"); break;
      }
     // DISPLAT DATA
      Serial.print(DHT.humidity,1);
      Serial.print(",\t");
      Serial.println(DHT.temperature,1);
      delay(1000);
    }


    IO中断计时

    kittenblock中小学创客名师推荐的图形化编程软件

    int PinRev = 14;
    uint32_t rawCode[1024];
    uint8_t rawCode_pin[1024];
    int rawCodeCnt = 0;
    bool printed = true;
    //中断函数
    uint32_t t0 = 0;
    
    void interrupt_serv()
    {
    
        rawCode_pin[rawCodeCnt] = digitalRead(PinRev);
        rawCode[rawCodeCnt] = micros();
        rawCodeCnt++;
    }
    void setup()
    {
        Serial.begin(115200);
        delay(100);
        Serial.println("hello ESP8266 IR ,I am start");
        pinMode(PinRev, INPUT_PULLUP);//INPUT_PULLDOWN
    
        attachInterrupt(PinRev, interrupt_serv, CHANGE);
     
    }
    
    void loop()
    {
        if (rawCodeCnt > 0)
        {
            if (micros() - rawCode[0] > 100000)
            {
    
                Serial.println("=========================================");
                for (int i = rawCodeCnt - 1; i > 0; i--)
                {
                    if(rawCode > rawCode[i - 1]){
                        rawCode = rawCode - rawCode[i - 1];
                    }else{
    
                        rawCode = (uint32_t)(0xffffffff-rawCode) + rawCode[i - 1]; 
                    }
                    
                }
                rawCode[0] = 0;
    
                for (int i = 0; i < rawCodeCnt; i++)
                {
                    Serial.print(i);
                    Serial.print( "  ");
                    Serial.print(rawCode_pin);
                    Serial.print( "  ");
                    Serial.println(rawCode   );
                }
                rawCodeCnt = 0;
            }
        }
    
    
    }


    SPI通..............................................................这里引用一个8266讨论群主的(致敬)

    kittenblock中小学创客名师推荐的图形化编程软件

    /*
    
    8266
    硬件spi demo
    作者:wxws
     qq:1103012
     Arduino_ESP8266开发群:104345601
    
    速度:1M
    引脚
        SCK < GPIO14
        MISO < GPIO12
        MOSI   < GPIO13
        SS   < GPIO15//  用 setHwCs(true)启用
    
    模式
         SPI_MODE0 0x00 - CPOL: 0  CPHA: 0
         SPI_MODE1 0x01 - CPOL: 0  CPHA: 1
         SPI_MODE2 0x10 - CPOL: 1  CPHA: 0
         SPI_MODE3 0x11 - CPOL: 1  CPHA: 1
     */
    
    
    #include <SPI.h>
    
     
    int channel;
    int  level ;
    
    void setup()
    { 
        //pinMode (slaveSelectPin, OUTPUT);//片选 ,用了内部控制,就不需要了
        pinMode (16, OUTPUT);//灯
    
        // initialize SPI:
        SPI.begin();
        SPI.setDataMode(SPI_MODE0);
        SPI.setHwCs(true);   //由spi内部控制片选 
    }
    
    void loop()
    {
    
    
        blinkled();
    }
    
    void digitalPotWrite(int address, int value)
    { 
        //digitalWrite(slaveSelectPin, LOW);  //片选 ,用了内部控制,就不需要了
     
        SPI.write(address);
        SPI.write(value);
     
        //digitalWrite(slaveSelectPin, HIGH);
    }
    
    
    void blinkled()
    {
        static u32 previousMillis = 0;
        static int ledState = 0;
    
        if (millis() - previousMillis > 500)
        {
            previousMillis = millis();
            ledState = 1 - ledState;
            digitalWrite(16, ledState);
    
            digitalPotWrite(channel++, channel+1);
    
    
        }
    }


    通用的这些设置就写到这里了,ide封装和uno大同小异,大家可自主开发,最后附送一张8266引脚图,8266只有一路adc,0-1v



    FVO1]IJCT@%GTKVAE4]A]MM.png 7QJ]D7SP%AJ7$PM_X90W@2F.png -7e3d6cb8c5ce6c67.jpg
    下一篇终于有时间更新了


    文章有帮助,可以请我喝杯咖啡

    1人打赏

  • TA的每日心情
    开心
    2015-10-29 21:04
  • 签到天数: 1 天

    [LV.1]初来乍到

    发表于 2015-11-29 18:21 | 显示全部楼层
    Sketch uses 292,772 bytes (67%) of program storage space. Maximum is 434,160 bytes.
    全局变量使用了48,008字节,(58%)的动态内存,余留33,912字节局部变量。最大为81,920字节。
    warning: espcomm_sync failed
    error: espcomm_open failed
    这个怎么回事呢?ESP8266。com的全是英文啊。看不懂。
  • TA的每日心情
    开心
    2015-11-29 23:22
  • 签到天数: 1 天

    [LV.1]初来乍到

    发表于 2015-11-30 21:26 | 显示全部楼层
    jiangxvhua 发表于 2015-11-29 18:21
    Sketch uses 292,772 bytes (67%) of program storage space. Maximum is 434,160 bytes.
    全局变量使用了48 ...

    重启,检查接线

    该用户从未签到

    发表于 2015-12-2 12:12 | 显示全部楼层



    1. wdt reset
    2. load 0x40100000, len 28756, room 16
    3. tail 4
    4. chksum 0xc5
    5. load 0x3ffe8000, len 1332, room 4
    6. tail 0
    7. chksum 0xde
    8. load 0x3ffe8540, len 1852, room 8
    9. tail 4
    10. chksum 0x9e
    11. csum 0x9e
    12. s$DHT11 TEST PROGRAM
    13. LIBRARY VERSION: 0.4.1



    14. Read sensor: OK
    15. Humidity (%): 38.0000
    16. Temperature (oC): 23.0000
    17. Temperature (oF): 73.4000
    18. Temperature (K): 296.1500
    19. Dew Point (oC):
    复制代码

    该用户从未签到

    发表于 2015-12-2 12:13 | 显示全部楼层
    楼主:再请教下
    串口监视器显示如上信息,
    工作时,是每次都要重启,才能发送一次数据吗?

    该用户从未签到

    发表于 2016-1-8 17:31 | 显示全部楼层
    楼主,dht的库文件能否提供一下?

    该用户从未签到

    发表于 2016-3-29 23:23 | 显示全部楼层
    hanziyi2188 发表于 2015-12-2 12:13
    楼主:再请教下
    串口监视器显示如上信息,
    工作时,是每次都要重启,才能发送一次数据吗?

    请问怎么接线,您成功了吗?
  • TA的每日心情
    慵懒
    2018-11-12 08:58
  • 签到天数: 37 天

    [LV.5]常住居民I

     楼主| 发表于 2016-3-30 09:13 | 显示全部楼层
    比U币U 发表于 2016-3-29 23:23
    请问怎么接线,您成功了吗?

    前面几篇有说明
    文章有帮助,可以请我喝杯咖啡

    该用户从未签到

    发表于 2016-5-9 09:05 来自手机 | 显示全部楼层
    可以用arduino代替TTL,烧录程序吗?
  • TA的每日心情
    慵懒
    2016-11-30 09:37
  • 签到天数: 6 天

    [LV.2]偶尔看看I

    发表于 2016-7-24 23:43 | 显示全部楼层
    买了esp8266-14 的,不知道怎么玩
    您需要登录后才可以回帖 登录 | 立即注册  

    本版积分规则

    热门推荐

    ESP32 Picoweb教程:提供JSON内容
    ESP32 Picoweb教程:提供J
    简介 在本ESP32教程中,我们将检查如何从Picoweb应用程序中提供JSON内容。有关Picoweb
    ESP32 / ESP8266 MicroPython教程:字符串拆分方法
    ESP32 / ESP8266 MicroPyt
    [/backcolor]引言[/backcolor][/backcolor]这篇ESP32 / ESP8266 MicroPython教程主
    ESP32 Arduino:获取FreeRTOS任务优先级
    ESP32 Arduino:获取FreeRT
    本文主要介绍如何使用ESP32和Arduino环境获取FreeRTOS任务的优先级。 简 介本文主要介
    体验OneNET4.0,一起来拼开发板
    体验OneNET4.0,一起来拼
    一、 活动时间2019年04月09日-2019年6月30日 二、活动链接1.登录Arduino中文社区账
    【原创】 drawbot平面关节scara机械臂写字机 画画机器人直播...
    【原创】 drawbot平面关节
    这个项目上个月就在做了,结构和代码反反复复改了多次,加上自己又太忙,一直没来得及
    Copyright   ©2015-2016  Arduino中文社区  Powered by©Discuz!   ( 蜀ICP备14017632号-3 )
    快速回复 返回顶部 返回列表