查看: 43693|回复: 18

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

[复制链接]

该用户从未签到

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

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

esp8266主要一个wifi通讯方案,我侧重发WiFi通讯的知识,下面我附上几个常见的传感器和通讯方式示例
1.DH11:
[mw_shl_code=cpp,true]#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);
}[/mw_shl_code]

IO中断计时
[mw_shl_code=cpp,true]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;
        }
    }


}[/mw_shl_code]

SPI通..............................................................这里引用一个8266讨论群主的(致敬)
[mw_shl_code=cpp,true]/*

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);


    }
}[/mw_shl_code]

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



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


该用户从未签到

发表于 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的全是英文啊。看不懂。

该用户从未签到

发表于 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
楼主:再请教下
串口监视器显示如上信息,
工作时,是每次都要重启,才能发送一次数据吗?

请问怎么接线,您成功了吗?

该用户从未签到

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

前面几篇有说明

该用户从未签到

发表于 2016-5-9 09:05 来自手机 | 显示全部楼层
可以用arduino代替TTL,烧录程序吗?

该用户从未签到

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

本版积分规则

arduino程序设计基础 blinker物联网解决方案

热门推荐

小爱同学控制不了ESP8266-01s
小爱同学控制不了ESP8266-
电灯科技可以控制ESP8266-01s继电器吸合,添加到米家APP后唤醒小爱同学控制不了#defin
合肥机器人创新公开赛
合肥机器人创新公开赛
合肥市第一次举办这种开源的比赛,意义还是挺好的,小学组比赛比较简答,直接上高中的
arduino麦轮重型运载车
arduino麦轮重型运载车
功能:可以装载货物,猫等没有采用PID调制,这样能减轻自重,而且对走直线要求没那么高
一文教你选择Arduino开发板,小白进
一文教你选择Arduino开发
笔者在2016年接触了Arduino,跳了万条坑,行了千里弯,到今天也算是Arduino的一
【干货分享】mega2560原理图PCB图纸altium designer18
【干货分享】mega2560原理
分享一下mega2560的板子 AD版本 **** 本内容被作者隐藏 **** ergo
Copyright   ©2015-2016  Arduino中文社区  Powered by©Discuz!   
快速回复 返回顶部 返回列表