0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

開發(fā)者作品:一款智能家居系統(tǒng),實現(xiàn)了 4 種控制方式(三)

機智云 ? 2022-05-19 17:16 ? 次閱讀

前言

本項目通過闡述基于ESP8266作為處理器(SoC模式開發(fā))接入機智云,借助機智云安卓開源框架設計的APP,實現(xiàn)了燈的控制、門禁的控制、溫濕度的讀取、有毒氣體的檢測、人體紅外檢測等功能。

通過改造機智云開源框架,還實現(xiàn)了一個智能硬件系統(tǒng)支持多種控制方式,如:安卓APP控制、本地按鍵控制、紅外遙控控制、天貓精靈控制,且每一種操作都能和APP同步顯示。

本文是第三篇:ESP8266接入機智云,驗證APP的功能。


1.ESP8266原理圖及外設接法

c96b258a-d214-11ec-8521-dac502259ad0.png

GPIO12-GPIO14用于驅動LED

c9854884-d214-11ec-8521-dac502259ad0.png

GPIO16接到繼電器,用于控制門禁

c9abad08-d214-11ec-8521-dac502259ad0.png

GPIO5用于溫濕度傳感器接口

c9c5be32-d214-11ec-8521-dac502259ad0.png

GPIO4和GPIO15分別用于人體紅外檢測和有毒氣體檢測。


2.下載工程和工程準備

在上一篇已經說明了如何去新建一個工程和數(shù)據點了,不贅述。

數(shù)據點如下:

c9ddeda4-d214-11ec-8521-dac502259ad0.png

2.2.生成工程

選擇MCU開發(fā)->SOC方案->ESP8266硬件平臺->生成代碼包

ca353ec4-d214-11ec-8521-dac502259ad0.png

2.3.下載工程

cab5af50-d214-11ec-8521-dac502259ad0.png

下載完成后解壓

cace7558-d214-11ec-8521-dac502259ad0.png

2.4.打開工程

使用一體化編譯工具,如下所示:

cafb48bc-d214-11ec-8521-dac502259ad0.png

環(huán)境教程搭建:https://club.gizwits.com/thread-6447-1-1.html

導入工程

步驟:

cb13bc30-d214-11ec-8521-dac502259ad0.png

cb215304-d214-11ec-8521-dac502259ad0.png

cb2ecce6-d214-11ec-8521-dac502259ad0.png

2.5.修改Makefile

cb7b6f60-d214-11ec-8521-dac502259ad0.png

cb962b5c-d214-11ec-8521-dac502259ad0.png

備注:注意保存修改后的文件,CTRL + S簡單粗暴。

2.6.編譯工程

cbe59c6e-d214-11ec-8521-dac502259ad0.png

編譯通過:

cc124d0e-d214-11ec-8521-dac502259ad0.png

生成的bin文件在工程的bin目錄下:

cc4359bc-d214-11ec-8521-dac502259ad0.png


3.編寫LED及繼電器控制代碼

3.1.新建一個hal_led.c和hal_led.h文件:

cc518000-d214-11ec-8521-dac502259ad0.png

3.1.1建立hal_led.c

cc6d6568-d214-11ec-8521-dac502259ad0.png

3.1.2.新建hal_led.h

cce3f9e4-d214-11ec-8521-dac502259ad0.png

3.2.編寫hal_led.h的代碼

為了方便使用宏定義來設置IO的電平。

/*
 * hal_led.h
 *
 *  Created on: 2019年3月16日
 *      Author: Yuan
 */

#ifndef APP_INCLUDE_DRIVER_HAL_LED_H_
#define APP_INCLUDE_DRIVER_HAL_LED_H_
#include 
#include 
#include 
#include 

#define RGB_R  12
#define RGB_G  13
#define RGB_B  14
#define Beep  15

//LED燈的控制
#define RedOn()          GPIO_OUTPUT_SET(GPIO_ID_PIN(RGB_R),1)
#define RedOff()     GPIO_OUTPUT_SET(GPIO_ID_PIN(RGB_R),0)
#define GreenOn()     GPIO_OUTPUT_SET(GPIO_ID_PIN(RGB_G),1)
#define GreenOff()     GPIO_OUTPUT_SET(GPIO_ID_PIN(RGB_G),0)
#define BlueOn()     GPIO_OUTPUT_SET(GPIO_ID_PIN(RGB_B),1)
#define BlueOff()     GPIO_OUTPUT_SET(GPIO_ID_PIN(RGB_B),0)
//繼電器控制
#define RelayOn()     gpio16_output_set(0)
#define RelayOff()     gpio16_output_set(1)

//函數(shù)聲明
void ledgpio_init(void);
void relaygpio_init(void);
void get_motion_gas(bool *move,bool *gas);
void body_gas_gpio_init();


#endif /* APP_INCLUDE_DRIVER_HAL_LED_H_ */

3.3.編寫hal_led.c文件

/*
 * led_hal.c
 *
 *  Created on: 2019年2月26日
 *      Author: Yuan
 */


#include "driver/hal_led.h"
#include "driver/hal_key.h"
#include "osapi.h"
#include "eagle_soc.h"

void ICACHE_FLASH_ATTR
ledgpio_init(void)
{
  //初始化led用到的IO口設置為輸出
  PIN_FUNC_SELECT(PERIPHS_IO_MUX_MTDI_U,FUNC_GPIO12);
  PIN_FUNC_SELECT(PERIPHS_IO_MUX_MTCK_U,FUNC_GPIO13);
  PIN_FUNC_SELECT(PERIPHS_IO_MUX_MTMS_U,FUNC_GPIO14);
  //默認輸出為低電平,滅
  RedOff();
  GreenOff();
  BlueOff();

  os_printf("GPIO_init_OK\n\r");
}
void ICACHE_FLASH_ATTR
body_gas_gpio_init(void)
{
  //設置GPIO15和GPIO4為輸入
  PIN_FUNC_SELECT(PERIPHS_IO_MUX_MTDO_U,FUNC_GPIO15);
  PIN_FUNC_SELECT(PERIPHS_IO_MUX_GPIO4_U,FUNC_GPIO4);
}
//獲取人體紅外檢測和有毒氣體檢測的電平
void ICACHE_FLASH_ATTR
get_motion_gas(BOOL *move,BOOL *gas)
{

  *move = GPIO_INPUT_GET(GPIO_ID_PIN(4));
  *gas  = GPIO_INPUT_GET(GPIO_ID_PIN(15));

}
//繼電器初始化函數(shù)
void ICACHE_FLASH_ATTR
relaygpio_init(void)
{
  //設置GPIO15為輸出
  gpio16_output_conf();
  //關閉繼電器
  gpio16_output_set(1);
}

4.編寫溫濕度讀取函數(shù)

溫濕度讀取函數(shù)是直接采用機智云官方的源碼,進入:https://download.gizwits.com/zh-cn/p/92/93

接著下載示例工程:

cd234950-d214-11ec-8521-dac502259ad0.png

下載完成后解壓,復制出想要的文件:

cd3fdf3e-d214-11ec-8521-dac502259ad0.png

把hal_temp_hum.c放在和hal_led.c同一個目錄,把hal_temp_hum.h放置在和hal_led.h同一級目錄下(工程中)

如下:

cd570c68-d214-11ec-8521-dac502259ad0.png


5.設置開發(fā)版配網按鍵

從原理圖可知,配網按鍵是GPIO0

進入user_main.c函數(shù):

cd8393a0-d214-11ec-8521-dac502259ad0.png

5.1.包含使用到文件,如溫度和led的頭文件

cdb5c302-d214-11ec-8521-dac502259ad0.png

5.2.修改配網按鍵

在工程中默認是GPIO0和GPIO14兩個按鈕

cdcf1672-d214-11ec-8521-dac502259ad0.png

現(xiàn)在我們只需要一個就是GPIO0,修改如下:

cdff0b20-d214-11ec-8521-dac502259ad0.png

刪除無用的代碼:

ce150862-d214-11ec-8521-dac502259ad0.png

ce2c5652-d214-11ec-8521-dac502259ad0.png

修改key0按鍵的短按事件響應函數(shù):

ce59830c-d214-11ec-8521-dac502259ad0.png

修改后:

cea591fc-d214-11ec-8521-dac502259ad0.png


6.調用初始化函數(shù):

在user_init()函數(shù)中初始化各個設備:

ced7e80a-d214-11ec-8521-dac502259ad0.png


7.編寫機智云事件處理函數(shù)

打開gizwits_product.c文件

cf26b458-d214-11ec-8521-dac502259ad0.png

添加頭文件以及定時器時間間隔修改:

cf3564c6-d214-11ec-8521-dac502259ad0.png

定位到gizwitsEventProcess函數(shù)。

7.1.修改數(shù)據點對應控制的函數(shù)

比如在云端:currentDataPoint.valueRed_OnOff這個點的值為真,則使ESP8266的第12引腳輸出高電平(RedOn),反之輸出低電平,其他的同理。

修改后如下:

int8_t ICACHE_FLASH_ATTR gizwitsEventProcess(eventInfo_t *info, uint8_t *data, uint32_t len)
{
    uint8_t i = 0;
    dataPoint_t * dataPointPtr = (dataPoint_t *)data;
    moduleStatusInfo_t * wifiData = (moduleStatusInfo_t *)data;

    if((NULL == info) || (NULL == data))
    {
        GIZWITS_LOG("!!! gizwitsEventProcess Error \n");
        return -1;
    }

    for(i = 0; i < info->num; i++)
    {
        switch(info->event[i])
        {
        case EVENT_Red_OnOff :
            currentDataPoint.valueRed_OnOff = dataPointPtr->valueRed_OnOff;
            GIZWITS_LOG("Evt: EVENT_Red_OnOff %d \n", currentDataPoint.valueRed_OnOff);
            if(0x01 == currentDataPoint.valueRed_OnOff)
            {
              RedOn();
                //user handle
            }
            else
            {
              RedOff();
                //user handle
            }
            break;
        case EVENT_Green_OnOff :
            currentDataPoint.valueGreen_OnOff = dataPointPtr->valueGreen_OnOff;
            GIZWITS_LOG("Evt: EVENT_Green_OnOff %d \n", currentDataPoint.valueGreen_OnOff);
            if(0x01 == currentDataPoint.valueGreen_OnOff)
            {
              GreenOn();
                //user handle
            }
            else
            {
              GreenOff();
                //user handle
            }
            break;
        case EVENT_Blue_OnOff :
            currentDataPoint.valueBlue_OnOff = dataPointPtr->valueBlue_OnOff;
            GIZWITS_LOG("Evt: EVENT_Blue_OnOff %d \n", currentDataPoint.valueBlue_OnOff);
            if(0x01 == currentDataPoint.valueBlue_OnOff)
            {
              BlueOn();
                //user handle
            }
            else
            {
              BlueOff();
                //user handle
            }
            break;
        case EVENT_Door_OnOff :
            currentDataPoint.valueDoor_OnOff = dataPointPtr->valueDoor_OnOff;
            GIZWITS_LOG("Evt: EVENT_Door_OnOff %d \n", currentDataPoint.valueDoor_OnOff);
            if(0x01 == currentDataPoint.valueDoor_OnOff)
            {
              RelayOn();
                //user handle
            }
            else
            {
              RelayOff();
                //user handle
            }
            break;



        case WIFI_SOFTAP:
            break;
        case WIFI_AIRLINK:
            break;
        case WIFI_STATION:
            break;
        case WIFI_CON_ROUTER:
            GIZWITS_LOG("@@@@ connected router\n");

            break;
        case WIFI_DISCON_ROUTER:
            GIZWITS_LOG("@@@@ disconnected router\n");

            break;
        case WIFI_CON_M2M:
            GIZWITS_LOG("@@@@ connected m2m\n");
      setConnectM2MStatus(0x01);

            break;
        case WIFI_DISCON_M2M:
            GIZWITS_LOG("@@@@ disconnected m2m\n");
      setConnectM2MStatus(0x00);

            break;
        case WIFI_RSSI:
            GIZWITS_LOG("@@@@ RSSI %d\n", wifiData->rssi);
            break;
        case TRANSPARENT_DATA:
            GIZWITS_LOG("TRANSPARENT_DATA \n");
            //user handle , Fetch data from [data] , size is [len]
            break;
        case MODULE_INFO:
            GIZWITS_LOG("MODULE INFO ...\n");
            break;

        default:
            break;
        }
    }
    system_os_post(USER_TASK_PRIO_2, SIG_UPGRADE_DATA, 0);

    return 0; 
}

8.數(shù)據上報

數(shù)據上報到云端使用的是userHandle函數(shù),定時上報數(shù)據

代碼如下:

void ICACHE_FLASH_ATTR userHandle(void)
{
    /*
    currentDataPoint.valueMove_Detection = ;//Add Sensor Data Collection
    currentDataPoint.valueGas_Detection = ;//Add Sensor Data Collection
    currentDataPoint.valuetemp = ;//Add Sensor Data Collection
    currentDataPoint.valuehum = ;//Add Sensor Data Collection
    */

    uint8_t ret=0;
    uint8_t curTemperature=0;
    uint8_t curHumidity=0;
    uint8_t curIr=0;
    static uint8_t thCtime=0,dection_timer=0;
    static BOOL move=true,gas=true;  //默認為真,也就是高電平
    thCtime++;
    dection_timer++;  //定時器間隔為100ms
    /*新添加代碼:溫濕度傳感器數(shù)據獲取*/
    if(TH_TIMEOUT
    {
        thCtime=0;
        ret=dh11Read(&curTemperature,&curHumidity);



        if(0==ret)
        {
            currentDataPoint.valuetemp=curTemperature;
            currentDataPoint.valuehum=curHumidity;
        }
        else
        {
            os_printf("@@@ dh11Read error! \n");
        }
    }
    get_motion_gas(&move,&gas);
    if(move == false)   //檢測到電平
    {
      currentDataPoint.valueMove_Detection = true;//Add Sensor Data Collection
    }
    else
    {
      currentDataPoint.valueMove_Detection = false;//Add Sensor Data Collection
    }
    if(gas == false)
    {
      currentDataPoint.valueGas_Detection = true;//Add Sensor Data Collection
    }
    else
    {
      currentDataPoint.valueGas_Detection = false;//Add Sensor Data Collection
    }

    system_os_post(USER_TASK_PRIO_2, SIG_UPGRADE_DATA, 0);
}

支持所有的代碼已經編寫完成。


9.下載到開發(fā)版驗證

燒錄軟件:ESPFlashDownloadTool_v3.4.4

下載地址:https://download.csdn.net/download/qq_36243942/11025638

下載后解壓打開:

步驟:

cf469e4e-d214-11ec-8521-dac502259ad0.png

cf559458-d214-11ec-8521-dac502259ad0.png

選擇下載文件和地址

cfa0c32e-d214-11ec-8521-dac502259ad0.png

在這里特別需要注意,如下:

查看源文件生成的目錄

cfc6c236-d214-11ec-8521-dac502259ad0.png

燒錄文件位置及說明:

cfe3cbc4-d214-11ec-8521-dac502259ad0.png

燒錄

d014d6b0-d214-11ec-8521-dac502259ad0.png


10.配網

下載完成之后對開發(fā)版進行復位。

步驟:

1.按開發(fā)版的SW1按鍵,綠色的LED亮起,進入SOFT_AP配網模式。

2.手機連接到需要連接的WIFI,打開機智云軟件

d03c84d0-d214-11ec-8521-dac502259ad0.png

2.填寫wifi信息

d06d1438-d214-11ec-8521-dac502259ad0.png

3.下一步

d0a4ad62-d214-11ec-8521-dac502259ad0.png

4.去連接ESP8266發(fā)射出來的熱點,密碼默認為:123456789

d0c0f508-d214-11ec-8521-dac502259ad0.png

5.連接完成后就可以使用手機進行控制了。

注意:如果你想遠程控制設備是需要登陸賬號的。


11.機智云開發(fā)中心查看設備

進入機智云開發(fā)中心的項目就可以看到設備在線。

d15fc78c-d214-11ec-8521-dac502259ad0.png

12.使用安卓開源框架的APP控制

在上一篇使用開源框架寫了APP,既然ESP8266的本地數(shù)據能夠上報,那么我們寫APP就能夠去控制這個設備啦,而且是不需要登錄的哦。因為我們已經把這個APP和云端綁定了。

那看一下界面吧,肯定是比自動生成的美觀那么一丟丟啦。哈哈哈哈

1.進入APP

d192aefe-d214-11ec-8521-dac502259ad0.png

2.查看已聯(lián)網設備

d1db2d1e-d214-11ec-8521-dac502259ad0.png

3.進入控制界面

d1fc34f0-d214-11ec-8521-dac502259ad0.png

d224895a-d214-11ec-8521-dac502259ad0.png

4.控制設備

d243356c-d214-11ec-8521-dac502259ad0.png

d26a49f4-d214-11ec-8521-dac502259ad0.png

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
收藏 人收藏

    評論

    相關推薦

    簡述三種esp32的開發(fā)方式是什么

    ESP32是一款由樂鑫(Espressif)推出的低功耗、高性能的Wi-Fi和藍牙雙模無線通信芯片,廣泛應用于物聯(lián)網、智能家居、智能硬件等領域。本文將詳細介紹三種ESP32的
    的頭像 發(fā)表于 08-20 09:11 ?1358次閱讀

    智能家居控制系統(tǒng)如何設計

    智能家居控制系統(tǒng)設計是個復雜而細致的過程,它涉及到多個方面的考慮,包括需求分析、設備選型、系統(tǒng)架構設計、網絡安全、用戶交互以及后期維護等。以下是對
    的頭像 發(fā)表于 07-23 14:45 ?971次閱讀

    智能家居控制方式有哪些

    智能家居控制方式多種多樣,這些方式不僅提升了家居生活的便捷性,還使得家居環(huán)境更加
    的頭像 發(fā)表于 07-23 14:30 ?745次閱讀

    智能家居照明控制系統(tǒng)功能特點與應用

    隨著科技的飛速發(fā)展,智能家居已成為現(xiàn)代家庭不可或缺的部分。其中,智能家居照明控制系統(tǒng)以其獨特的優(yōu)勢,正在逐步改變我們傳統(tǒng)的生活方式,使家庭
    的頭像 發(fā)表于 07-08 16:13 ?309次閱讀

    智能家居燈光控制系統(tǒng)功能特點

    智能照明是可以實現(xiàn)自動控制的先進照明方式智能家居燈光控制系統(tǒng)是現(xiàn)代
    的頭像 發(fā)表于 04-25 16:21 ?987次閱讀

    OpenHarmony南向開發(fā)案例:【 智能家居中控】

    今天打造的這一款全新智能家庭控制系統(tǒng),凸顯應用在智能控制和用戶體驗的特點,開創(chuàng)國內智能家居
    的頭像 發(fā)表于 04-23 15:50 ?889次閱讀
    OpenHarmony南向<b class='flag-5'>開發(fā)</b>案例:【 <b class='flag-5'>智能家居</b>中控】

    智能家居控制系統(tǒng)解決方案功能

    化的居住環(huán)境。 所謂的智能家居控制系統(tǒng)解決方案,不再僅僅是傳統(tǒng)的家具,而是被賦予“思想”,變得智能化。該方案依托物聯(lián)網云平臺,實現(xiàn)照明
    的頭像 發(fā)表于 04-09 15:58 ?557次閱讀

    東勝物聯(lián)攜多款智能網關亮相瑞芯微RK開發(fā)者大會

    東勝物聯(lián)基于瑞芯微芯片的智能網關產品在RK開發(fā)者大會的智能家居區(qū)域進行展出。
    的頭像 發(fā)表于 03-15 10:17 ?854次閱讀
    東勝物聯(lián)攜多款<b class='flag-5'>智能</b>網關亮相瑞芯微RK<b class='flag-5'>開發(fā)者</b>大會

    智能家居控制方案功能與應用

    是以物聯(lián)網作為核心技術支撐,利用網絡通信手段,實現(xiàn)對住宅中各種設備與建筑設施進行自動控制與管理。集成開發(fā)智能家居控制方案,快速啟動、多種人機
    的頭像 發(fā)表于 02-29 16:18 ?638次閱讀

    集中電源控制器在智能家居中的應用

    集中電源控制器在智能家居中也有廣泛的應用。隨著智能家居的普及,各種家電設備、照明系統(tǒng)、安防系統(tǒng)等都需要電源支持,而集中電源
    的頭像 發(fā)表于 01-30 15:05 ?667次閱讀
    集中電源<b class='flag-5'>控制</b>器在<b class='flag-5'>智能家居</b>中的應用

    Python智能家居系統(tǒng)代碼介紹

    Python智能家居系統(tǒng)一種基于Python編程語言開發(fā)智能家居控制系統(tǒng),在現(xiàn)代家庭中得到了
    的頭像 發(fā)表于 01-25 09:46 ?1176次閱讀

    智能家居控制系統(tǒng)原理與應用

    智能家居控制系統(tǒng)是指利用先進的計算機科學和通信技術,將各種家居設備和系統(tǒng)進行連接和集成,實現(xiàn)智能
    的頭像 發(fā)表于 01-10 11:44 ?2509次閱讀

    開源項目!教你如何復刻自平衡賽車機器人、智能家居中控、競技機器人先進模糊控制器等

    三種不同的操控方式 經常翻車的朋友們都知道,能在翻車后快速擺正車身的車才是好車。 就像動畫《四驅兄弟》中展現(xiàn)的那樣,在比賽中需要跟著賽車起跑圈,而且賽車如果被撞翻還需要重新用手扶正
    發(fā)表于 12-26 09:17

    歡迎加入飛騰派開發(fā)者社區(qū),感謝每開發(fā)者

    發(fā)燒友論壇起策劃了飛騰派開發(fā)板測評活動,受到了廣大開發(fā)者的喜愛。 通過這次活動,飛騰派成功地吸引眾多高質量開發(fā)者的關注和參與,進
    發(fā)表于 12-11 16:11

    語音識別技術在智能家居控制系統(tǒng)中的應用與前景

    隨著智能家居技術的不斷發(fā)展,人們對于家居環(huán)境的智能控制需求也越來越高。語音識別技術作為一種智能
    的頭像 發(fā)表于 11-03 09:10 ?1188次閱讀