Esp8266 도킹 고양이 엘프 제어 RGB 색등

5530 단어

1. 코드 획득 컴파일

  • 본 프로젝트git clone 다운로드https://github.com/espressif/esp-aliyun.git cd esp-aliyun
  • 삼원조 정보 문서 소록 삼원조 NVS 구역.만약 make erase를 실행했다면플래시, 삼원조를 다시 녹음해야 합니다.
  • Smart light example RGB 램프 구성은 ESP32/ESP8266 개발판에 GPIO0, GPIO2, GPIO4(lightbulb.c에서 수정 가능)
  • smart light 컴파일 및 실행 cd examples/solutions/smartlight make chip=esp32 defconfig 또는make chip=esp8266 defconfig make-j8 flash 모니터
  • 2. 설비 배망과 귀속

  • 공공 APP 가입 가능
  • 티몰 엘프 0배합(티몰 엘프가 연결된 라우팅 계정 비밀번호를 장치에 전송)하여 장치를 배망 상태에 진입,티몰 요정에게 "티몰 요정, 발견 장비"티몰 요정 답장"스캔 중, 스마트램프 발견, 지금 연결하나요"티몰 요정에게 "연결"또는 "네"티몰 요정 답장"네, 장비 연결 중, 잠시만 기다려주세요"장비는 티몰 요정이 보낸 관리 프레임 배선 정보를 받아 연결합니다:
  • 티몰 요정과 장치가 연결되어 네트워크가 성공하기를 기다리고 있습니다. 티몰 요정은 "스마트 장치가 연결되었으니 이제 음성으로 제어해 보세요"라고 말했습니다. 이때 티몰 요정 스피커를 통해 장치를 제어할 수 있습니다.만약에 이전에 클라우드 스마트 APP를 통해 네트워크를 연결하면 티몰 엘프 네트워크가 성공한 후에 클라우드 스마트 APP는 더 이상 장치를 표시하지 않습니다.만약에 클라우드 스마트 APP를 통해 네트워크를 계속 연결하면 APP는 네트워크를 연결하는 데 실패할 것이다.'장치 추가가 실패하고 장치가 관리자에 의해 귀속되었으니 관리자에게 연락하여 귀속을 해제하거나 장치를 공유해 주십시오'라고 표시한다.

  • 3. 코드 실현

  • 데이터 수신과 해석 수신은 mqtt를 통해 발송된 문자열로 여기에 사용된 cJSON의 함수로 대상에 대응하는 값을 추출한다.
  • static int user_property_set_event_handler(const int devid, const char *request, const int request_len)
     {
         int res = 0, value = 0;
         cJSON *root = NULL, *LightSwitch = NULL, *LightColor = NULL;
         ESP_LOGE(TAG, "Property Set Received, Devid: %d, Request: %s", devid, request);
         if (!request)
         {
             return NULL_VALUE_ERROR;
         }
        /*        json */
        root = cJSON_Parse(request);
        if (!root)
        {
            ESP_LOGI(TAG, "JSON Parse Error");
            return FAIL_RETURN;
        }
        LightSwitch = cJSON_GetObjectItem(root, "powerstate");
        //       
        if (LightSwitch)
        {
            ESP_LOGE(TAG, "Property LightSwitch->valueint: %d", LightSwitch->valueint);
            if (LightSwitch->valueint == 1)
            {
                rgb_set_pwm(0, 100, 0);
            }
            else
            {
                rgb_set_pwm(0, 0, 0);
            }
        }
        LightColor = cJSON_GetObjectItem(root, "color");
        if (LightColor)
        {
            ESP_LOGE(TAG, "Property LightColor->valueint: %d", LightColor->valueint);
            value = LightColor->valueint;
            switch (value)
            {
            case 16711680: //  
                rgb_set_pwm(100, 0, 0);
                break;
            case 255: //  :
                rgb_set_pwm(0, 0, 100);
                break;
            case 65280: //  
                rgb_set_pwm(0, 100, 0);
                break;
            case 65535: //  
                rgb_set_pwm(0, 100, 100);
                break;
            case 8388736: //  
                rgb_set_pwm(50, 0, 50);
                break;
            case 16753920: //  
                rgb_set_pwm(100, 50, 0);
                break;
            case 16776960: //  
                rgb_set_pwm(100, 100, 99);
                break;
            default:
                break;
            }
        }
        cJSON_Delete(root);
        res = IOT_Linkkit_Report(devid, ITM_MSG_POST_PROPERTY, (unsigned char *)request, request_len);
        return SUCCESS_RETURN;
    }
    
  • 데이터 에스컬레이션 사용자가 IOT 를 호출할 수 있음Linkkit_Report () 함수는 속성을 에스컬레이션하며, 속성 에스컬레이션은 클라우드에서 정의한 속성 형식에 따라 JSON 인코딩을 사용하여 에스컬레이션해야 한다.속성 ID와 값은 IOT 에 JSON 형식으로 배치됩니다.Linkkit_Report()의payload에서는 데이터 유형과 여러 속성의 형식이 다릅니다.
  • static bool linkkit_connected = false;
    //    
    static void ButtonShortPressCallBack(void *arg)
    {
        char property_payload[50] = {0};
        if (strcmp((char *)arg, "Button0") == 0)
        {
            ESP_LOGI(TAG, "button0");
            ws2812_setColor(254, 0, 0);
            if (linkkit_connected)
            {
                HAL_Snprintf(property_payload, sizeof(property_payload), "{\"color\":16711680,\"powerstate\":1}");
            }
        }
        else if (strcmp((char *)arg, "Button1") == 0)
        {
            ESP_LOGI(TAG, "button1");
            ws2812_setColor(0, 254, 0);
            if (linkkit_connected)
            {
                HAL_Snprintf(property_payload, sizeof(property_payload), "{\"color\":65280,\"powerstate\":1}");
            }
        }
        else if (strcmp((char *)arg, "Button2") == 0)
        {
            ESP_LOGI(TAG, "button2");
            ws2812_setColor(0, 0, 254);
            if (linkkit_connected)
            {
    
                HAL_Snprintf(property_payload, sizeof(property_payload), "{\"color\":255,\"powerstate\":1}");
            }
        }
        IOT_Linkkit_Report(0, ITM_MSG_POST_PROPERTY, (unsigned char *)property_payload, strlen(property_payload));
        //ESP_LOGI(TAG, "ButtonShortPressCallBack type %s %d esp_get_free_heap_size(): %d ", type, strlen(type), esp_get_free_heap_size());
    }
    
    
    
    /**
     * @description:     
     * @param {type} 
     * @return: 
     */
    void TaskButton()
    {
        //     gpio      
        button_handle_t btn_handle = button_dev_init(0, 0, BUTTON_ACTIVE_LOW);
        button_dev_add_tap_cb(BUTTON_PUSH_CB, ButtonShortPressCallBack, "Button0", 50 / portTICK_PERIOD_MS, btn_handle);
        //     gpio      
        btn_handle = button_dev_init(4, 0, BUTTON_ACTIVE_LOW);
        button_dev_add_tap_cb(BUTTON_PUSH_CB, ButtonShortPressCallBack, "Button1", 50 / portTICK_PERIOD_MS, btn_handle); //     gpio      
        btn_handle = button_dev_init(5, 0, BUTTON_ACTIVE_LOW);
        button_dev_add_tap_cb(BUTTON_PUSH_CB, ButtonShortPressCallBack, "Button2", 50 / portTICK_PERIOD_MS, btn_handle);
        vTaskDelete(NULL);
    }
    

    좋은 웹페이지 즐겨찾기