使用FreeRTOS连接小爱同学时反馈设备出线问题了-Arduino中文社区 - Powered by Discuz!

Arduino中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 758|回复: 4

[已解答] 使用FreeRTOS连接小爱同学时反馈设备出线问题了

[复制链接]
发表于 2022-7-28 22:40 | 显示全部楼层 |阅读模式
在使用ESP32 版本的FreeRTOS SDK连接小爱同学时,通过语音让小爱同学对ESP32进行开关灯操作,小爱同学一直提示"要操作的设备好像出问题了等一会再试吧",但是所控制的灯可以被操作。在查看log后,发现系统推送给ESP32的MQTT主题可以被EPS32收到,ESP32也会推送给系统MQTT主题。用arduino开发时就不会出现这个问题。
以下是使用FreeRTOS开发时的代码。

  1. /* Hello World Example

  2.    This example code is in the Public Domain (or CC0 licensed, at your option.)

  3.    Unless required by applicable law or agreed to in writing, this
  4.    software is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
  5.    CONDITIONS OF ANY KIND, either express or implied.
  6. */
  7. #include <stdio.h>
  8. #include <stdlib.h>
  9. #include <string.h>
  10. #include "blinker_api.h"
  11. #include "esp_log.h"
  12. #include "driver/gpio.h"

  13. static const char *TAG = "blinker";

  14. #define BUTTON_1    "btn-abc"
  15. #define NUM_1       "num-abc"

  16. static int count = 0;

  17. void button1_callback(const blinker_widget_param_val_t *val)
  18. {
  19.     ESP_LOGI(TAG, "button state: %s", val->s);

  20.     count++;

  21.     cJSON *param = cJSON_CreateObject();
  22.     blinker_widget_switch(param, val->s);
  23.     blinker_widget_print(BUTTON_1, param);
  24.     cJSON_Delete(param);

  25.     cJSON *num_param = cJSON_CreateObject();
  26.     blinker_widget_color(num_param, "#FF00FF");
  27.     blinker_widget_text(num_param, "按键测试");
  28.     blinker_widget_unit(num_param, "次");
  29.     blinker_widget_value_number(num_param, count);
  30.     blinker_widget_print(NUM_1, num_param);
  31.     cJSON_Delete(num_param);

  32.     printf("gpio stata : %d\r\n", gpio_get_level(12));
  33.     gpio_set_level(12, (~gpio_get_level(12)) & 0x01);
  34.     printf("gpio stata : %d\r\n", gpio_get_level(12));
  35. }

  36. static void data_callback(const char *data)
  37. {
  38.     ESP_LOGI(TAG, "data: %s", data);
  39. }

  40. static void blinker_miot_cb_t(const blinker_va_param_cb_t *val)
  41. {

  42.     cJSON *param = cJSON_CreateObject();
  43.     char buffer[8];
  44.     memset(buffer, 0, 8);
  45.     switch (val->type)
  46.     {
  47.     case BLINKER_PARAM_POWER_STATE:
  48.     {


  49.         if (strcmp(BLINKER_CMD_ON, val->s) == 0)
  50.         {
  51.             blinker_miot_power_state(param, BLINKER_CMD_ON);
  52.             blinker_miot_print(param);
  53.             gpio_set_level(12, 1);
  54.         }
  55.         else if (strcmp(BLINKER_CMD_OFF, val->s) == 0)
  56.         {
  57.             blinker_miot_power_state(param, BLINKER_CMD_TRUE);

  58.             blinker_miot_print(param);
  59.             gpio_set_level(12, 0);
  60.         }


  61.         break;

  62.     }
  63.     default:
  64.         break;
  65.     }

  66.     cJSON_Delete(param);
  67. }

  68. void app_main()
  69. {
  70.     gpio_config_t gpio_cfg = {};
  71.     gpio_cfg.intr_type = GPIO_INTR_DISABLE;
  72.     gpio_cfg.mode = GPIO_MODE_INPUT_OUTPUT;
  73.     gpio_cfg.pin_bit_mask = (1ULL << 12);
  74.     gpio_cfg.pull_up_en = GPIO_PULLUP_ENABLE;
  75.     /// 初始化GPIO口
  76.     gpio_config(&gpio_cfg);

  77.     blinker_init();

  78.     blinker_widget_add(BUTTON_1, BLINKER_BUTTON, button1_callback);
  79.     blinker_data_handler(data_callback);

  80.     blinker_miot_handler_register(blinker_miot_cb_t);
  81. }
复制代码



 楼主| 发表于 2022-7-28 23:08 | 显示全部楼层
ESP32收到的MQTT主题



微信截图_20220728230502.png

ESP32收到的MQTT主题

ESP32收到的MQTT主题
发表于 2022-7-30 12:50 | 显示全部楼层
blinker FreeRTOS 接口的版本跟 idf 版本要对应起来吧。。我以前搞esp8266 rtos sdk的时候也遇到这种问题,没有回调,版主说版本问题吧。。没适配新版本什么的。。
发表于 2022-8-21 23:36 | 显示全部楼层
请按readme要求,使用对应版本的IDF
https://github.com/blinker-iot/blinker-esp-idf
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|Archiver|手机版|Arduino中文社区

GMT+8, 2024-11-28 08:39 , Processed in 0.086521 second(s), 21 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表