Найти тему

Espressif и Тяжко время тратить и отступать. PС- bluetooth - led

ВЫ готовы потратить время на возможно плачевный результат?🤢 Моя готова, а хотя всё за то что это вариант ПРОИГРЫШНЫЙ, а опыт грит "АБЛАжАЦА ВАМ ДАНО!!!"

Потратил время на sdcard в esp232-cam пока не получилось устойчиво получить результат (об этом в другое время и другом месте) и решил отступить . Переключимся на PС- bluetooth - led.

видео ролик подтверждение пошаговой инструкции

соберём данные/ поменяем стратегию/ сделаем запрос/и вернемся ))) 🤮

👌Ну понятно почему выбирают Бейсик или АРДУИНО (но для меня это бейсик, а серьёзные задачи с большим кодом - это медленно и ужасные проекты). Ходят спецы потом и пудрят начальству глаза важностью и оперативность. На аssemblere такое бы не прокатило, а почему? Навыки нужны помимо компетенций и клацать больше надо ко клаве. Зато код маленький и быстры. Хотя какие задачи творить и на какую перспективу?👌 КУЧА примеров уже есть и форумов.? Есть мнение, что:

при изучении и надо начать с простого и перспективного, а затем переключаться на боле сложные задачи.

bluetooth classic хорош тем , что не надо занимать лишние ножки )))😙
ПК также довольно хорошо обеспечен данными решениями.

перспективен для многих задач.

примерно тоже и по другим платам
примерно тоже и по другим платам

Запустим EPRESSIF🏳‍🌈

запускаем👌👌
запускаем👌👌

ДАЛЕЕ ✔

ШЕСТЬ ПУНКТОВ
ШЕСТЬ ПУНКТОВ

ОБРАТИТЕ ВНИМАНИЕ НАСТРОЙКИ СБИЛИСЬ. ИСКАТЬ ГДЕ И КАК НЕОХОТА. решил обеспечить CTRL+N 😙

два пункта esp32
два пункта esp32

создадим проект. зашли в каталог main и открыли файл main.c . Уберем всё!

выделим правая кнопка мышки и согласно стрелкам!
выделим правая кнопка мышки и согласно стрелкам!

Скопируйте в mail.c ниже код , а можете взять его тут , а информация по нём тут

#include <stdint.h>
#include <string.h>
#include <stdbool.h>
#include <stdio.h>
#include "nvs.h"
#include "nvs_flash.h"
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "esp_log.h"
#include "esp_bt.h"
#include "esp_bt_main.h"
#include "esp_gap_bt_api.h"
#include "esp_bt_device.h"
#include "esp_spp_api.h"
#include "driver/gpio.h"
#include "time.h"
#include "sys/time.h"
#define SPP_SERVER_NAME "SPP_SERVER"
#define EXAMPLE_DEVICE_NAME "ESP32test"
#define SPP_SHOW_DATA 0
#define SPP_SHOW_SPEED 1
#define SPP_SHOW_MODE SPP_SHOW_DATA
#define LED_PIN 12 //2
const char *tag = "Bluetooth";
static const esp_spp_mode_t esp_spp_mode = ESP_SPP_MODE_CB;
static const esp_spp_sec_t sec_mask = ESP_SPP_SEC_AUTHENTICATE;
static const esp_spp_role_t role_slave = ESP_SPP_ROLE_SLAVE;
static void init_led(void)
{ gpio_reset_pin(LED_PIN); //gpio_pad_select_gpio(LED_PIN);
gpio_set_direction(LED_PIN, GPIO_MODE_OUTPUT);
ESP_LOGI(tag, "Init led completed");
}
static void esp_spp_cb(esp_spp_cb_event_t event, esp_spp_cb_param_t *param)
{ switch (event)
{ case ESP_SPP_INIT_EVT:
ESP_LOGI(tag, "ESP_SPP_INIT_EVT");
esp_spp_start_srv(sec_mask, role_slave, 0, SPP_SERVER_NAME);
break;
case ESP_SPP_DISCOVERY_COMP_EVT:
ESP_LOGI(tag, "ESP_SPP_DISCOVERY_COMP_EVT");
break;
case ESP_SPP_OPEN_EVT:
ESP_LOGI(tag, "ESP_SPP_OPEN_EVT");
break;
case ESP_SPP_CLOSE_EVT:
ESP_LOGI(tag, "ESP_SPP_CLOSE_EVT");
break;
case ESP_SPP_START_EVT:
ESP_LOGI(tag, "ESP_SPP_START_EVT");
esp_bt_dev_set_device_name(EXAMPLE_DEVICE_NAME);
esp_bt_gap_set_scan_mode(ESP_BT_CONNECTABLE, ESP_BT_GENERAL_DISCOVERABLE);
break;
case ESP_SPP_CL_INIT_EVT:
ESP_LOGI(tag, "ESP_SPP_CL_INIT_EVT");
break;
case ESP_SPP_DATA_IND_EVT:
ESP_LOGI(tag, "ESP_SPP_DATA_IND_EVT len=%d handle=%d",
param->data_ind.len, param->data_ind.handle);
esp_log_buffer_hex("", param->data_ind.data, param->data_ind.len);
char received_data[5];
snprintf(received_data, sizeof(received_data), "%s", param->data_ind.data);
if (strncmp(received_data, "ON", 2) == 0)
{ gpio_set_level(LED_PIN, 1); // turn on the LED
ESP_LOGI(tag, "Setting LED to ON");
}
else if (strncmp(received_data, "OFF", 3) == 0)
{ gpio_set_level(LED_PIN, 0); // turn off the LED
ESP_LOGI(tag, "Setting LED to OFF");
}
esp_spp_write(param->data_ind.handle, param->data_ind.len, param->data_ind.data);
break;
case ESP_SPP_CONG_EVT:
ESP_LOGI(tag, "ESP_SPP_CONG_EVT");
break;
case ESP_SPP_WRITE_EVT:
ESP_LOGI(tag, "ESP_SPP_WRITE_EVT");
break;
case ESP_SPP_SRV_OPEN_EVT:
ESP_LOGI(tag, "ESP_SPP_SRV_OPEN_EVT");
break;
case ESP_SPP_SRV_STOP_EVT:
ESP_LOGI(tag, "ESP_SPP_SRV_STOP_EVT");
break;
case ESP_SPP_UNINIT_EVT:
ESP_LOGI(tag, "ESP_SPP_UNINIT_EVT");
break;
default:
break;
}
}
void esp_bt_gap_cb(esp_bt_gap_cb_event_t event, esp_bt_gap_cb_param_t *param)
{ switch (event)
{
case ESP_BT_GAP_AUTH_CMPL_EVT:
{ if (param->auth_cmpl.stat == ESP_BT_STATUS_SUCCESS)
{ ESP_LOGI(tag, "authentication success: %s", param->auth_cmpl.device_name);
esp_log_buffer_hex(tag, param->auth_cmpl.bda, ESP_BD_ADDR_LEN);
}
else
{ ESP_LOGE(tag, "authentication failed, status:%d", param->auth_cmpl.stat);
}
break;
}
case ESP_BT_GAP_PIN_REQ_EVT:
{ ESP_LOGI(tag, "ESP_BT_GAP_PIN_REQ_EVT min_16_digit:%d", param->pin_req.min_16_digit);
if (param->pin_req.min_16_digit)
{ ESP_LOGI(tag, "Input pin code: 0000 0000 0000 0000");
esp_bt_pin_code_t pin_code = {0};
esp_bt_gap_pin_reply(param->pin_req.bda, true, 16, pin_code);
}
else
{ ESP_LOGI(tag, "Input pin code: 1234");
esp_bt_pin_code_t pin_code;
pin_code[0] = '1';
pin_code[1] = '2';
pin_code[2] = '3';
pin_code[3] = '4';
esp_bt_gap_pin_reply(param->pin_req.bda, true, 4, pin_code);
}
break;
}
#if (CONFIG_BT_SSP_ENABLED == true)
case ESP_BT_GAP_CFM_REQ_EVT:
ESP_LOGI(tag, "ESP_BT_GAP_CFM_REQ_EVT Please compare the numeric value: %d", param->cfm_req.num_val);
esp_bt_gap_ssp_confirm_reply(param->cfm_req.bda, true);
break;
case ESP_BT_GAP_KEY_NOTIF_EVT:
ESP_LOGI(tag, "ESP_BT_GAP_KEY_NOTIF_EVT passkey:%d", param->key_notif.passkey);
break;
case ESP_BT_GAP_KEY_REQ_EVT:
ESP_LOGI(tag, "ESP_BT_GAP_KEY_REQ_EVT Please enter passkey!");
break;
#endif
case ESP_BT_GAP_MODE_CHG_EVT:
ESP_LOGI(tag, "ESP_BT_GAP_MODE_CHG_EVT mode:%d", param->mode_chg.mode);
break;
default:
{ ESP_LOGI(tag, "event: %d", event); break; }
}
return;
}
void app_main(void)
{ init_led();
esp_err_t ret = nvs_flash_init();
if (ret == ESP_ERR_NVS_NO_FREE_PAGES || ret == ESP_ERR_NVS_NEW_VERSION_FOUND)
{ ESP_ERROR_CHECK(nvs_flash_erase());
ret = nvs_flash_init();
}
ESP_ERROR_CHECK(ret);
ESP_ERROR_CHECK(esp_bt_controller_mem_release(ESP_BT_MODE_BLE));
esp_bt_controller_config_t bt_cfg = BT_CONTROLLER_INIT_CONFIG_DEFAULT();
if ((ret = esp_bt_controller_init(&bt_cfg)) != ESP_OK)
{ESP_LOGE(tag, "%s initialize controller failed: %s\n", __func__, "1");
return;
}
if ((ret = esp_bt_controller_enable(ESP_BT_MODE_CLASSIC_BT)) != ESP_OK)
{ESP_LOGE(tag, "%s enable controller failed: %s\n", __func__, "2");
return;
}
if ((ret = esp_bluedroid_init()) != ESP_OK)
{ESP_LOGE(tag, "%s initialize bluedroid failed: %s\n", __func__, "3");
return;
}
if ((ret = esp_bluedroid_enable()) != ESP_OK)
{ESP_LOGE(tag, "%s enable bluedroid failed: %s\n", __func__, "4");
return;
}
if ((ret = esp_bt_gap_register_callback(esp_bt_gap_cb)) != ESP_OK)
{ ESP_LOGE(tag, "%s gap register failed: %s\n", __func__, "5");
return;
}
if ((ret = esp_spp_register_callback(esp_spp_cb)) != ESP_OK)
{ ESP_LOGE(tag, "%s spp register failed: %s\n", __func__, "6");
return;
}
if ((ret = esp_spp_init(esp_spp_mode)) != ESP_OK)
{ESP_LOGE(tag, "%s spp init failed: %s\n", __func__, "7");
return;
}
#if (CONFIG_BT_SSP_ENABLED == true)
/* Set default parameters for Secure Simple Pairing */
esp_bt_sp_param_t param_type = ESP_BT_SP_IOCAP_MODE;
esp_bt_io_cap_t iocap = ESP_BT_IO_CAP_IO;
esp_bt_gap_set_security_param(param_type, &iocap, sizeof(uint8_t));
#endif
/** Set default parameters for Legacy Pairing
* Use variable pin, input pin code when pairing*/
esp_bt_pin_type_t pin_type = ESP_BT_PIN_TYPE_VARIABLE;
esp_bt_pin_code_t pin_code;
esp_bt_gap_set_pin(pin_type, 0, pin_code);
}

🚩Обратите внимание на строку в коде🚩

#define LED_PIN 2

заменим на

#define LED_PIN 12 //2

светодиод привязан к данной ножке!!

куда подключили ножку светодиода. ? если к 12 ножке 🏴

😙также надо обратить внимание на строки

ESP_LOGI(tag, "Input pin code: 1234");
esp_bt_pin_code_t pin_code;
pin_code[0] = '1';
pin_code[1] = '2';
pin_code[2] = '3';
pin_code[3] = '4';
esp_bt_gap_pin_reply(param->pin_req.bda, true, 4, pin_code);

при подключении на ПК запросить должна данный пароль😊

запустим компиляцию!
запустим компиляцию!
  • Выполним указанное красной стрелкой - запустим компиляцию
  • синей стрелкой - ошибка после компиляции Не нашла библиотеку!!!!
  • запустим файл sdkconfig - это зелёная стрелка😜 два щелка мыши!
надо найти раздел Bluetooth
надо найти раздел Bluetooth

Выполним три пункта!!!(😎 потом закроем с сохранением - SAVE.

процесс
процесс

Итак запустим - ПУНКТ 1 Наблюдаем - ПУНКТ 2

есть ошибки
есть ошибки

ошибок меньше. но остались!!!🤔

ESP_LOGI(tag, "ESP_SPP_DATA_IND_EVT len=%d handle=%d", param->data_ind.len, param->data_ind.handle); заменим на =>

ESP_LOGI(tag, "ESP_SPP_DATA_IND_EVT len=%d handle=%d", (uint8_t) )param->data_ind.len, (uint8_t) param->data_ind.handle);

///---------------------------------------------🤔

ESP_LOGI(tag, "ESP_BT_GAP_CFM_REQ_EVT Please compare the numeric value: %d", param->cfm_req.num_val); заменим на =>

ESP_LOGI(tag, "ESP_BT_GAP_CFM_REQ_EVT Please compare the numeric value: %d", (uint8_t) param->cfm_req.num_val);

///-------------------------------------🤔

ESP_LOGI(tag, "ESP_BT_GAP_KEY_NOTIF_EVT passkey:%d", param->key_notif.passkey); заменим на =>

ESP_LOGI(tag, "ESP_BT_GAP_KEY_NOTIF_EVT passkey:%d", (uint8_t) param->key_notif.passkey);

//----------------------------------------------🤔

После пункта 1 ошибок меньше стало (смотрите ниже)

проблемы с настройками
проблемы с настройками

жмём ПУНКТ 0 - два раза щёлк🚀

настройки BLUETOOTH
настройки BLUETOOTH

ЗЕЛЕНЫМИ стрелами указано , что указать! Активировали . Закрываем!😋

сохранить надо
сохранить надо

согласно стрелке✔ Потом компиляция!

ПРИМЕЧАНИЕ: открыл sdkconfig в текстовом формате и там не всё сохранилось и ввёл принудительно в конце желательно

CONFIG_BT_ENABLED=y
CONFIG_BTDM_CTRL_MODE_BLE_ONLY=n
CONFIG_BTDM_CTRL_MODE_BR_EDR_ONLY=y
CONFIG_BTDM_CTRL_MODE_BTDM=n
CONFIG_BT_CLASSIC_ENABLED=y
CONFIG_WIFI_ENABLED=n
CONFIG_BT_SPP_ENABLED=y
CONFIG_BT_BLE_ENABLED=n

пошла авто отладка
пошла авто отладка

подключаем плату с контроллером контроллер

пункт 1 уже сделали?
пункт 1 уже сделали?

делаем пункт 2

на плате есть  кнопочка перезапуска!
на плате есть кнопочка перезапуска!

далее на ПК

стрелки  указывают на важные моменты
стрелки указывают на важные моменты

по пунктам?

стрелки указывают путь!
стрелки указывают путь!

Выше по пунктам 1 и 2!

появилось?
появилось?

активировать - выбрать

запрос пароля
запрос пароля

укажем пароль. подключиться.

пункт 3 показывает суть
пункт 3 показывает суть

пункт 3 показывает , что появились два ПОРТА обмена с esp32test

на просторах ИНЕТ гребём терминальную программу. например указана ниже.

настраиваем
настраиваем

Делаем по пунктам.

посылаем команды
посылаем команды

видим результат другая тема

то мигает , то горит

ОБРАТИТЕ  ВНИМАНИЕ  НА  ПРОВОДА ,  ДИОДИК И КНОПКУ. ВЗЯТЫ ИЗ бУ ПК.,
ОБРАТИТЕ ВНИМАНИЕ НА ПРОВОДА , ДИОДИК И КНОПКУ. ВЗЯТЫ ИЗ бУ ПК.,

СВЕТОДИОДИК ГАСНЕТ И ТУХНЕТ.  при  ON / OFF
СВЕТОДИОДИК ГАСНЕТ И ТУХНЕТ. при ON / OFF

Результат достигнут? НЕТ))))😉Надо обеспечить повторяемость , а значит повторю при организации видеоролика на ПК и ноутбуке, а также использую новую версию espressif полезный возможно материал

продолжение будет((( видео ролик выполнения пошаговой инструкции