Version AP avec mdp, bateaux en régime TOR
This commit is contained in:
2
main/CMakeLists.txt
Normal file
2
main/CMakeLists.txt
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
idf_component_register(SRCS "loop.c" "mqttHandler.c" "wifi.c" "bsp.c" "app_main.c"
|
||||||
|
INCLUDE_DIRS ".")
|
||||||
13
main/Kconfig.projbuild
Normal file
13
main/Kconfig.projbuild
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
menu "Example Configuration"
|
||||||
|
|
||||||
|
config BROKER_URL
|
||||||
|
string "Broker URL"
|
||||||
|
default "mqtt://mqtt.eclipseprojects.io"
|
||||||
|
help
|
||||||
|
URL of the broker to connect to
|
||||||
|
|
||||||
|
config BROKER_URL_FROM_STDIN
|
||||||
|
bool
|
||||||
|
default y if BROKER_URL = "FROM_STDIN"
|
||||||
|
|
||||||
|
endmenu
|
||||||
155
main/app_main.c
Normal file
155
main/app_main.c
Normal file
@@ -0,0 +1,155 @@
|
|||||||
|
/* MQTT (over TCP) Example
|
||||||
|
|
||||||
|
This example code is in the Public Domain (or CC0 licensed, at your option.)
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, this
|
||||||
|
software is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
|
||||||
|
CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdint.h>
|
||||||
|
#include <stddef.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include "esp_wifi.h"
|
||||||
|
#include "esp_system.h"
|
||||||
|
#include "nvs_flash.h"
|
||||||
|
#include "esp_event.h"
|
||||||
|
#include "esp_netif.h"
|
||||||
|
#include "protocol_examples_common.h"
|
||||||
|
|
||||||
|
#include "freertos/FreeRTOS.h"
|
||||||
|
#include "freertos/task.h"
|
||||||
|
#include "freertos/semphr.h"
|
||||||
|
#include "freertos/queue.h"
|
||||||
|
|
||||||
|
#include "lwip/sockets.h"
|
||||||
|
#include "lwip/dns.h"
|
||||||
|
#include "lwip/netdb.h"
|
||||||
|
|
||||||
|
#include "esp_log.h"
|
||||||
|
#include "mqtt_client.h"
|
||||||
|
#include "driver/gpio.h"
|
||||||
|
#include "bsp.h"
|
||||||
|
|
||||||
|
static const char *TAG = "MQTT_EXAMPLE";
|
||||||
|
|
||||||
|
#define BLINK_GPIO 2
|
||||||
|
static uint8_t s_led_state = 0;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* @brief Event handler registered to receive MQTT events
|
||||||
|
*
|
||||||
|
* This function is called by the MQTT client event loop.
|
||||||
|
*
|
||||||
|
* @param handler_args user data registered to the event.
|
||||||
|
* @param base Event base for the handler(always MQTT Base in this example).
|
||||||
|
* @param event_id The id for the received event.
|
||||||
|
* @param event_data The data for the event, esp_mqtt_event_handle_t.
|
||||||
|
*/
|
||||||
|
static void mqtt_event_handler(void *handler_args, esp_event_base_t base, int32_t event_id, void *event_data)
|
||||||
|
{
|
||||||
|
switch (QUISUISJE){
|
||||||
|
case BATEAU:
|
||||||
|
mqtt_event_handler_bateau(handler_args,base,event_id,event_data);
|
||||||
|
break;
|
||||||
|
case RADIO_BATEAU:
|
||||||
|
mqtt_event_handler_radio_bateau(handler_args,base,event_id,event_data);
|
||||||
|
break;
|
||||||
|
case VOITURE:
|
||||||
|
mqtt_event_handler_voiture(handler_args,base,event_id,event_data);
|
||||||
|
break;
|
||||||
|
case RADIO_VOITURE:
|
||||||
|
mqtt_event_handler_radio_voiture(handler_args,base,event_id,event_data);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void mqtt_app_start(void)
|
||||||
|
{
|
||||||
|
esp_mqtt_client_config_t mqtt_cfg = {
|
||||||
|
.broker.address.uri = CONFIG_BROKER_URL,
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
esp_mqtt_client_handle_t client = esp_mqtt_client_init(&mqtt_cfg);
|
||||||
|
/* The last argument may be used to pass data to the event handler, in this example mqtt_event_handler */
|
||||||
|
esp_mqtt_client_register_event(client, ESP_EVENT_ANY_ID, mqtt_event_handler, NULL);
|
||||||
|
esp_mqtt_client_start(client);
|
||||||
|
//*
|
||||||
|
int msg_id;
|
||||||
|
//uint16_t count=0;
|
||||||
|
char data[10];
|
||||||
|
while(1)
|
||||||
|
{
|
||||||
|
/*switch (QUISUISJE){
|
||||||
|
case BATEAU:
|
||||||
|
loop_bateau();
|
||||||
|
break;
|
||||||
|
case RADIO_BATEAU:
|
||||||
|
loop_radio_bateau();
|
||||||
|
break;
|
||||||
|
case VOITURE:
|
||||||
|
loop_voiture();
|
||||||
|
break;
|
||||||
|
case RADIO_VOITURE:
|
||||||
|
loop_radio_voiture();
|
||||||
|
break;
|
||||||
|
case STARTER_VOITURE:
|
||||||
|
loop_starter_voiture();
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}*/
|
||||||
|
s_led_state=!s_led_state;
|
||||||
|
gpio_set_level(BLINK_GPIO, s_led_state);
|
||||||
|
sprintf(data,"%i",s_led_state);
|
||||||
|
//if(MQTT_CONNECTED) {
|
||||||
|
msg_id = esp_mqtt_client_publish(client, "/topic/qos0",data, 0, 0, 0);
|
||||||
|
//}
|
||||||
|
vTaskDelay(100 / portTICK_PERIOD_MS);
|
||||||
|
}
|
||||||
|
//*/
|
||||||
|
}
|
||||||
|
|
||||||
|
void app_main(void)
|
||||||
|
{
|
||||||
|
ESP_LOGI(TAG, "[APP] Startup..");
|
||||||
|
ESP_LOGI(TAG, "[APP] Free memory: %" PRIu32 " bytes", esp_get_free_heap_size());
|
||||||
|
ESP_LOGI(TAG, "[APP] IDF version: %s", esp_get_idf_version());
|
||||||
|
|
||||||
|
esp_log_level_set("*", ESP_LOG_INFO);
|
||||||
|
esp_log_level_set("mqtt_client", ESP_LOG_VERBOSE);
|
||||||
|
esp_log_level_set("MQTT_EXAMPLE", ESP_LOG_VERBOSE);
|
||||||
|
esp_log_level_set("TRANSPORT_BASE", ESP_LOG_VERBOSE);
|
||||||
|
esp_log_level_set("esp-tls", ESP_LOG_VERBOSE);
|
||||||
|
esp_log_level_set("TRANSPORT", ESP_LOG_VERBOSE);
|
||||||
|
esp_log_level_set("outbox", ESP_LOG_VERBOSE);
|
||||||
|
|
||||||
|
ESP_ERROR_CHECK(nvs_flash_init());
|
||||||
|
// ESP_ERROR_CHECK(esp_netif_init());
|
||||||
|
// ESP_ERROR_CHECK(esp_event_loop_create_default());
|
||||||
|
|
||||||
|
/* This helper function configures Wi-Fi or Ethernet, as selected in menuconfig.
|
||||||
|
* Read "Establishing Wi-Fi or Ethernet Connection" section in
|
||||||
|
* examples/protocols/README.md for more information about this function.
|
||||||
|
*/
|
||||||
|
ESP_LOGI(TAG, "Example configured to blink GPIO LED!");
|
||||||
|
//gpio_reset_pin(BLINK_GPIO);
|
||||||
|
gpio_reset_pin(15);
|
||||||
|
/* Set the GPIO as a push/pull output */
|
||||||
|
//pio_set_direction(BLINK_GPIO, GPIO_MODE_OUTPUT);
|
||||||
|
gpio_set_direction(15, GPIO_MODE_OUTPUT);
|
||||||
|
boardInit();
|
||||||
|
setupBoard();
|
||||||
|
loop_board();
|
||||||
|
//ESP_ERROR_CHECK(example_connect());
|
||||||
|
|
||||||
|
|
||||||
|
//esp_wifi_set_ps(WIFI_PS_NONE) ;
|
||||||
|
//mqtt_app_start();
|
||||||
|
}
|
||||||
399
main/bsp.c
Normal file
399
main/bsp.c
Normal file
@@ -0,0 +1,399 @@
|
|||||||
|
/* MQTT (over TCP) Example
|
||||||
|
|
||||||
|
This example code is in the Public Domain (or CC0 licensed, at your option.)
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, this
|
||||||
|
software is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
|
||||||
|
CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#include "bsp.h"
|
||||||
|
#define MIN_POTAR 1500
|
||||||
|
#define MAX_POTAR 2500
|
||||||
|
|
||||||
|
static const char *TAG_DEBUG= "VE_DEBUG";
|
||||||
|
model_t QUISUISJE;
|
||||||
|
int idModele;
|
||||||
|
int idGroup;
|
||||||
|
networkType_t networkType;
|
||||||
|
uint32_t minDir=MIN_POTAR,maxDir=MAX_POTAR ,minThr=MIN_POTAR,maxThr=MAX_POTAR;
|
||||||
|
|
||||||
|
//static uint8_t led_strip_pixels[EXAMPLE_LED_NUMBERS * 3];
|
||||||
|
ledc_channel_config_t ledc_channel[LEDC_TEST_CH_NUM] = {
|
||||||
|
{
|
||||||
|
.channel = LEDC_HS_CH0_CHANNEL,
|
||||||
|
.duty = 0,
|
||||||
|
.gpio_num = LEDC_HS_CH0_GPIO,
|
||||||
|
.speed_mode = LEDC_LS_MODE,
|
||||||
|
.hpoint = 0,
|
||||||
|
.timer_sel = LEDC_LS_TIMER,
|
||||||
|
.flags.output_invert = 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
.channel = LEDC_HS_CH1_CHANNEL,
|
||||||
|
.duty = 0,
|
||||||
|
.gpio_num = LEDC_HS_CH1_GPIO,
|
||||||
|
.speed_mode = LEDC_LS_MODE,
|
||||||
|
.hpoint = 0,
|
||||||
|
.timer_sel = LEDC_LS_TIMER,
|
||||||
|
.flags.output_invert = 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
.channel = LEDC_LS_CH2_CHANNEL,
|
||||||
|
.duty = 0,
|
||||||
|
.gpio_num = LEDC_LS_CH2_GPIO,
|
||||||
|
.speed_mode = LEDC_LS_MODE,
|
||||||
|
.hpoint = 0,
|
||||||
|
.timer_sel = LEDC_LS_TIMER,
|
||||||
|
.flags.output_invert = 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
.channel = LEDC_LS_CH3_CHANNEL,
|
||||||
|
.duty = 0,
|
||||||
|
.gpio_num = LEDC_LS_CH3_GPIO,
|
||||||
|
.speed_mode = LEDC_LS_MODE,
|
||||||
|
.hpoint = 0,
|
||||||
|
.timer_sel = LEDC_LS_TIMER,
|
||||||
|
.flags.output_invert = 0
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
void testGpio(void){
|
||||||
|
if(gpio_get_level(TYPE)) ESP_LOGI(TAG_DEBUG, "TYPE is high");
|
||||||
|
else ESP_LOGI(TAG_DEBUG, "TYPE is low");
|
||||||
|
if(gpio_get_level(IN1)) ESP_LOGI(TAG_DEBUG, "IN1 is high");
|
||||||
|
else ESP_LOGI(TAG_DEBUG, "IN1 is low");
|
||||||
|
if(gpio_get_level(CONF1)) ESP_LOGI(TAG_DEBUG, "CONF1 is high");
|
||||||
|
else ESP_LOGI(TAG_DEBUG, "CONF1 is low");
|
||||||
|
if(gpio_get_level(CONF2)) ESP_LOGI(TAG_DEBUG, "CONF2 is high");
|
||||||
|
else ESP_LOGI(TAG_DEBUG, "CONF2 is low");
|
||||||
|
if(gpio_get_level(CONF3)) ESP_LOGI(TAG_DEBUG, "CONF3 is high");
|
||||||
|
else ESP_LOGI(TAG_DEBUG, "CONF3 is low");
|
||||||
|
if(gpio_get_level(CONF4)) ESP_LOGI(TAG_DEBUG, "CONF4 is high");
|
||||||
|
else ESP_LOGI(TAG_DEBUG, "CONF4 is low");
|
||||||
|
if(gpio_get_level(CONF5)) ESP_LOGI(TAG_DEBUG, "CONF5 is high");
|
||||||
|
else ESP_LOGI(TAG_DEBUG, "CONF5 is low");
|
||||||
|
if(gpio_get_level(CONF6)) ESP_LOGI(TAG_DEBUG, "CONF6 is high");
|
||||||
|
else ESP_LOGI(TAG_DEBUG, "CONF6 is low");
|
||||||
|
if(gpio_get_level(CONF7)) ESP_LOGI(TAG_DEBUG, "CONF7 is high");
|
||||||
|
else ESP_LOGI(TAG_DEBUG, "CONF7 is low");
|
||||||
|
if(gpio_get_level(CONF8)) ESP_LOGI(TAG_DEBUG, "CONF8 is high");
|
||||||
|
else ESP_LOGI(TAG_DEBUG, "CONF8 is low");
|
||||||
|
if(gpio_get_level(CONF9)) ESP_LOGI(TAG_DEBUG, "CONF9 is high");
|
||||||
|
else ESP_LOGI(TAG_DEBUG, "CONF9 is low");
|
||||||
|
}
|
||||||
|
|
||||||
|
void testAdc(void){
|
||||||
|
int adcValue;
|
||||||
|
getBatt(&adcValue);
|
||||||
|
ESP_LOGI(TAG_DEBUG, "getBatt is %d",adcValue);
|
||||||
|
getThr(&adcValue);
|
||||||
|
ESP_LOGI(TAG_DEBUG, "getThr is %d",adcValue);
|
||||||
|
getDir(&adcValue);
|
||||||
|
ESP_LOGI(TAG_DEBUG, "getDir is %d",adcValue);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void getIdModel(model_t type){
|
||||||
|
idModele=0;
|
||||||
|
if(gpio_get_level(CONF2))idModele+=1;
|
||||||
|
if(gpio_get_level(CONF3))idModele+=2;
|
||||||
|
if(gpio_get_level(CONF4))idModele+=4;
|
||||||
|
if(gpio_get_level(CONF5))idModele+=8;
|
||||||
|
if(gpio_get_level(CONF6))idModele+=16;
|
||||||
|
}
|
||||||
|
void getIdGroup(){
|
||||||
|
idGroup=0;
|
||||||
|
if(gpio_get_level(CONF7))idGroup+=1;
|
||||||
|
if(gpio_get_level(CONF8))idGroup+=2;
|
||||||
|
if(gpio_get_level(CONF9))idGroup+=4;
|
||||||
|
}
|
||||||
|
void getModel(void){
|
||||||
|
if(gpio_get_level(TYPE)){ // RADIO
|
||||||
|
if(gpio_get_level(CONF1)) {
|
||||||
|
QUISUISJE=RADIO_BATEAU;
|
||||||
|
networkType=NETWORKBATEAU;
|
||||||
|
getIdModel(QUISUISJE);
|
||||||
|
getIdGroup();
|
||||||
|
if(idModele==0){
|
||||||
|
QUISUISJE=STARTER_BATEAU;
|
||||||
|
ESP_LOGI(TAG_DEBUG, "je suis STARTER_BATEAU %d groupe %d",idModele,idGroup);
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
QUISUISJE=RADIO_BATEAU;
|
||||||
|
ESP_LOGI(TAG_DEBUG, "je suis RADIO_BATEAU %d groupe %d",idModele,idGroup);
|
||||||
|
} }
|
||||||
|
else {
|
||||||
|
getIdModel(RADIO_VOITURE);
|
||||||
|
getIdGroup();
|
||||||
|
networkType=NETWORKVOITURE;
|
||||||
|
if(idModele==0){
|
||||||
|
QUISUISJE=STARTER_VOITURE;
|
||||||
|
ESP_LOGI(TAG_DEBUG, "je suis STARTER_VOITURE %d groupe %d",idModele,idGroup);
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
QUISUISJE=RADIO_VOITURE;
|
||||||
|
ESP_LOGI(TAG_DEBUG, "je suis RADIO_VOITURE %d groupe %d",idModele,idGroup);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else{ // VEHICULE
|
||||||
|
if(gpio_get_level(CONF1)){
|
||||||
|
QUISUISJE=BATEAU;
|
||||||
|
getIdModel(QUISUISJE);
|
||||||
|
getIdGroup();
|
||||||
|
networkType=NETWORKBATEAU;
|
||||||
|
ESP_LOGI(TAG_DEBUG, "je suis BATEAU %d groupe %d",idModele,idGroup);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
QUISUISJE=VOITURE;
|
||||||
|
networkType=NETWORKVOITURE;
|
||||||
|
getIdModel(QUISUISJE);
|
||||||
|
getIdGroup();
|
||||||
|
ESP_LOGI(TAG_DEBUG, "je suis VOITURE %d groupe %d",idModele,idGroup);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void boardInit(void)
|
||||||
|
{
|
||||||
|
//zero-initialize the config structure.
|
||||||
|
gpio_config_t io_conf = {};
|
||||||
|
/* //disable interrupt
|
||||||
|
io_conf.intr_type = GPIO_INTR_DISABLE;
|
||||||
|
//set as output mode
|
||||||
|
io_conf.mode = GPIO_MODE_OUTPUT;
|
||||||
|
//bit mask of the pins that you want to set,e.g.GPIO18/19
|
||||||
|
io_conf.pin_bit_mask = GPIO_OUTPUT_PIN_SEL;
|
||||||
|
//disable pull-down mode
|
||||||
|
io_conf.pull_down_en = 0;
|
||||||
|
//disable pull-up mode
|
||||||
|
io_conf.pull_up_en = 0;
|
||||||
|
//configure GPIO with the given settings
|
||||||
|
gpio_config(&io_conf);
|
||||||
|
//*/
|
||||||
|
|
||||||
|
//bit mask of the pins, use GPIO4/5 here
|
||||||
|
io_conf.pin_bit_mask = GPIO_INPUT_PIN_SEL;
|
||||||
|
//set as input mode
|
||||||
|
io_conf.mode = GPIO_MODE_INPUT;
|
||||||
|
//enable pull-up mode
|
||||||
|
io_conf.pull_up_en = 1;
|
||||||
|
gpio_config(&io_conf);
|
||||||
|
|
||||||
|
getModel();
|
||||||
|
|
||||||
|
initWS2812();
|
||||||
|
initMotor();
|
||||||
|
|
||||||
|
initAdc();
|
||||||
|
|
||||||
|
timerGlobal=1000/TRANSMIT_PERIOD_INTERVAL*DEFAULT_TIMER_VALUE;//initialisation du timer par défaut
|
||||||
|
//testGpio();
|
||||||
|
//testAdc();
|
||||||
|
}
|
||||||
|
|
||||||
|
void setMotor(uint32_t speedA, bool directionA,uint32_t speedB, bool directionB)
|
||||||
|
{
|
||||||
|
if(QUISUISJE==BATEAU){
|
||||||
|
if(speedA<SEUIL_MOTEUR){
|
||||||
|
gpio_set_level(M1A,0);
|
||||||
|
gpio_set_level(M1B,0);
|
||||||
|
}
|
||||||
|
else if(directionA){
|
||||||
|
gpio_set_level(M1A,1);
|
||||||
|
gpio_set_level(M1B,0);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
gpio_set_level(M1A,0);
|
||||||
|
gpio_set_level(M1B,1);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(speedB<SEUIL_MOTEUR){
|
||||||
|
gpio_set_level(M2A,0);
|
||||||
|
gpio_set_level(M2B,0);
|
||||||
|
}
|
||||||
|
else if(directionB){
|
||||||
|
gpio_set_level(M2A,1);
|
||||||
|
gpio_set_level(M2B,0);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
gpio_set_level(M2A,0);
|
||||||
|
gpio_set_level(M2B,1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
if(directionA){
|
||||||
|
ledc_set_duty(ledc_channel[0].speed_mode, ledc_channel[0].channel, speedA);
|
||||||
|
ledc_update_duty(ledc_channel[0].speed_mode, ledc_channel[0].channel);
|
||||||
|
ledc_set_duty(ledc_channel[1].speed_mode, ledc_channel[1].channel, 0);
|
||||||
|
ledc_update_duty(ledc_channel[1].speed_mode, ledc_channel[1].channel);
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
ledc_set_duty(ledc_channel[0].speed_mode, ledc_channel[0].channel, 0);
|
||||||
|
ledc_update_duty(ledc_channel[0].speed_mode, ledc_channel[0].channel);
|
||||||
|
ledc_set_duty(ledc_channel[1].speed_mode, ledc_channel[1].channel, speedA);
|
||||||
|
ledc_update_duty(ledc_channel[1].speed_mode, ledc_channel[1].channel);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(directionB){
|
||||||
|
ledc_set_duty(ledc_channel[2].speed_mode, ledc_channel[2].channel, speedB);
|
||||||
|
ledc_update_duty(ledc_channel[2].speed_mode, ledc_channel[2].channel);
|
||||||
|
ledc_set_duty(ledc_channel[3].speed_mode, ledc_channel[3].channel, 0);
|
||||||
|
ledc_update_duty(ledc_channel[3].speed_mode, ledc_channel[3].channel);
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
ledc_set_duty(ledc_channel[2].speed_mode, ledc_channel[2].channel, 0);
|
||||||
|
ledc_update_duty(ledc_channel[2].speed_mode, ledc_channel[2].channel);
|
||||||
|
ledc_set_duty(ledc_channel[3].speed_mode, ledc_channel[3].channel, speedB);
|
||||||
|
ledc_update_duty(ledc_channel[3].speed_mode, ledc_channel[3].channel);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void initMotor(void)
|
||||||
|
{
|
||||||
|
int ch;
|
||||||
|
|
||||||
|
if(QUISUISJE==VOITURE){ /*
|
||||||
|
* Prepare and set configuration of timers
|
||||||
|
* that will be used by LED Controller
|
||||||
|
*/
|
||||||
|
ledc_timer_config_t ledc_timerM1 = {
|
||||||
|
.duty_resolution = LEDC_TIMER_10_BIT, // resolution of PWM duty
|
||||||
|
.freq_hz = 250, // frequency of PWM signal
|
||||||
|
.speed_mode = LEDC_HS_MODE, // timer mode
|
||||||
|
.timer_num = LEDC_HS_TIMER, // timer index
|
||||||
|
.clk_cfg = LEDC_AUTO_CLK, // Auto select the source clock
|
||||||
|
};
|
||||||
|
ledc_timer_config_t ledc_timerM2 = {
|
||||||
|
.duty_resolution = LEDC_TIMER_10_BIT, // resolution of PWM duty
|
||||||
|
.freq_hz = 250, // frequency of PWM signal
|
||||||
|
.speed_mode = LEDC_LS_MODE, // timer mode
|
||||||
|
.timer_num = LEDC_LS_TIMER, // timer index
|
||||||
|
.clk_cfg = LEDC_AUTO_CLK, // Auto select the source clock
|
||||||
|
};
|
||||||
|
// Set configuration of timer0 for high speed channels
|
||||||
|
ledc_timer_config(&ledc_timerM1);
|
||||||
|
// Prepare and set configuration of timer1 for low speed channels
|
||||||
|
//ledc_timer.speed_mode = LEDC_HS_MODE;
|
||||||
|
//ledc_timer.timer_num = LEDC_HS_TIMER;
|
||||||
|
ledc_timer_config(&ledc_timerM2);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Prepare individual configuration
|
||||||
|
* for each channel of LED Controller
|
||||||
|
* by selecting:
|
||||||
|
* - controller's channel number
|
||||||
|
* - output duty cycle, set initially to 0
|
||||||
|
* - GPIO number where LED is connected to
|
||||||
|
* - speed mode, either high or low
|
||||||
|
* - timer servicing selected channel
|
||||||
|
* Note: if different channels use one timer,
|
||||||
|
* then frequency and bit_num of these channels
|
||||||
|
* will be the same
|
||||||
|
*/
|
||||||
|
|
||||||
|
// Set LED Controller with previously prepared configuration
|
||||||
|
for (ch = 0; ch < LEDC_TEST_CH_NUM; ch++) {
|
||||||
|
ledc_channel_config(&ledc_channel[ch]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
gpio_reset_pin(M1A);
|
||||||
|
gpio_set_direction(M1A, GPIO_MODE_OUTPUT);
|
||||||
|
gpio_reset_pin(M1B);
|
||||||
|
gpio_set_direction(M1B, GPIO_MODE_OUTPUT);
|
||||||
|
gpio_reset_pin(M2A);
|
||||||
|
gpio_set_direction(M2A, GPIO_MODE_OUTPUT);
|
||||||
|
gpio_reset_pin(M2B);
|
||||||
|
gpio_set_direction(M2B, GPIO_MODE_OUTPUT);
|
||||||
|
}
|
||||||
|
setMotor(0,true,0,true);
|
||||||
|
|
||||||
|
}
|
||||||
|
adc_oneshot_unit_handle_t adc1_handle;
|
||||||
|
void initAdc(void)
|
||||||
|
{
|
||||||
|
adc_oneshot_unit_init_cfg_t init_config1 = {
|
||||||
|
.unit_id = ADC_UNIT_1,
|
||||||
|
};
|
||||||
|
ESP_ERROR_CHECK(adc_oneshot_new_unit(&init_config1, &adc1_handle));
|
||||||
|
|
||||||
|
//-------------ADC1 Config---------------//
|
||||||
|
adc_oneshot_chan_cfg_t config = {
|
||||||
|
.bitwidth = ADC_BITWIDTH_DEFAULT,
|
||||||
|
.atten = EXAMPLE_ADC_ATTEN,
|
||||||
|
};
|
||||||
|
(adc_oneshot_config_channel(adc1_handle, BATT_ADC, &config));
|
||||||
|
(adc_oneshot_config_channel(adc1_handle, THR_ADC, &config));
|
||||||
|
(adc_oneshot_config_channel(adc1_handle, DIR_ADC, &config));
|
||||||
|
|
||||||
|
}
|
||||||
|
void initWS2812(void)
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
// ESP_LOGI(TAG, "Create RMT TX channel");
|
||||||
|
rmt_channel_handle_t led_chan = NULL;
|
||||||
|
rmt_tx_channel_config_t tx_chan_config = {
|
||||||
|
.clk_src = RMT_CLK_SRC_DEFAULT, // select source clock
|
||||||
|
.gpio_num = RMT_LED_STRIP_GPIO_NUM,
|
||||||
|
.mem_block_symbols = 64, // increase the block size can make the LED less flickering
|
||||||
|
.resolution_hz = RMT_LED_STRIP_RESOLUTION_HZ,
|
||||||
|
.trans_queue_depth = 4, // set the number of transactions that can be pending in the background
|
||||||
|
};
|
||||||
|
ESP_ERROR_CHECK(rmt_new_tx_channel(&tx_chan_config, &led_chan));
|
||||||
|
|
||||||
|
// ESP_LOGI(TAG, "Install led strip encoder");
|
||||||
|
rmt_encoder_handle_t led_encoder = NULL;
|
||||||
|
led_strip_encoder_config_t encoder_config = {
|
||||||
|
.resolution = RMT_LED_STRIP_RESOLUTION_HZ,
|
||||||
|
};
|
||||||
|
ESP_ERROR_CHECK(rmt_new_led_strip_encoder(&encoder_config, &led_encoder));
|
||||||
|
|
||||||
|
//ESP_LOGI(TAG, "Enable RMT TX channel");
|
||||||
|
ESP_ERROR_CHECK(rmt_enable(led_chan));
|
||||||
|
|
||||||
|
//ESP_LOGI(TAG, "Start LED rainbow chase");
|
||||||
|
rmt_transmit_config_t tx_config = {
|
||||||
|
.loop_count = 0, // no transfer loop
|
||||||
|
};
|
||||||
|
//*/
|
||||||
|
}
|
||||||
|
|
||||||
|
void getBattRaw(int *value){
|
||||||
|
adc_oneshot_read(adc1_handle, BATT_ADC, value);
|
||||||
|
}
|
||||||
|
void getDirRaw(int *value){
|
||||||
|
adc_oneshot_read(adc1_handle, DIR_ADC, value);
|
||||||
|
}
|
||||||
|
void getThrRaw(int *value){
|
||||||
|
adc_oneshot_read(adc1_handle, THR_ADC, value);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Normalized value in mV
|
||||||
|
void getBatt(int *value){
|
||||||
|
int rawValue;
|
||||||
|
getBattRaw( &rawValue);
|
||||||
|
*value=(int)(rawValue*3.5);//scale TBD
|
||||||
|
}
|
||||||
|
// Normalized value between -100 and +100
|
||||||
|
void getDir(int *value){
|
||||||
|
int rawValue;
|
||||||
|
getDirRaw( &rawValue);
|
||||||
|
if(rawValue>maxDir)maxDir=rawValue;
|
||||||
|
if(rawValue<minDir) minDir=rawValue;
|
||||||
|
*value=-100 + (rawValue-minDir)*200/(maxDir-minDir);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Normalized value between -100 and +100
|
||||||
|
void getThr(int *value){
|
||||||
|
int rawValue;
|
||||||
|
getThrRaw( &rawValue);
|
||||||
|
if(rawValue>maxThr)maxThr=rawValue;
|
||||||
|
if(rawValue<minThr)minThr=rawValue;
|
||||||
|
*value=-100 + (rawValue-minThr)*200/(maxThr-minThr);
|
||||||
|
}
|
||||||
|
|
||||||
180
main/bsp.h
Normal file
180
main/bsp.h
Normal file
@@ -0,0 +1,180 @@
|
|||||||
|
/* MQTT (over TCP) Example
|
||||||
|
|
||||||
|
This example code is in the Public Domain (or CC0 licensed, at your option.)
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, this
|
||||||
|
software is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
|
||||||
|
CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
*/
|
||||||
|
#ifndef BSP_FINISTRC
|
||||||
|
#define BSP_FINISTRC
|
||||||
|
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdint.h>
|
||||||
|
#include <stddef.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include "esp_wifi.h"
|
||||||
|
#include "esp_system.h"
|
||||||
|
#include "nvs_flash.h"
|
||||||
|
#include "esp_event.h"
|
||||||
|
#include "esp_netif.h"
|
||||||
|
|
||||||
|
#include "freertos/FreeRTOS.h"
|
||||||
|
#include "freertos/task.h"
|
||||||
|
#include "freertos/semphr.h"
|
||||||
|
#include "freertos/queue.h"
|
||||||
|
#include "freertos/portmacro.h"
|
||||||
|
|
||||||
|
#include "lwip/sockets.h"
|
||||||
|
#include "lwip/dns.h"
|
||||||
|
#include "lwip/netdb.h"
|
||||||
|
|
||||||
|
#include "esp_log.h"
|
||||||
|
#include "mqtt_client.h"
|
||||||
|
#include "esp_err.h"
|
||||||
|
#include "wifi.h"
|
||||||
|
#include "mqttHandler.h"
|
||||||
|
#include "loop.h"
|
||||||
|
//static const char *TAG = "mqtt_example";
|
||||||
|
|
||||||
|
//#define GPIO_OUTPUT_IO_0 CONFIG_GPIO_OUTPUT_0
|
||||||
|
//#define GPIO_OUTPUT_IO_1 CONFIG_GPIO_OUTPUT_1
|
||||||
|
//#define GPIO_OUTPUT_PIN_SEL ((1ULL<<GPIO_OUTPUT_IO_0) | (1ULL<<GPIO_OUTPUT_IO_1))
|
||||||
|
|
||||||
|
//configuration pins section
|
||||||
|
#include "driver/gpio.h"
|
||||||
|
#define TYPE (36)
|
||||||
|
#define IN1 (39)
|
||||||
|
#define CONF1 (22)
|
||||||
|
#define CONF2 (21)
|
||||||
|
#define CONF3 (19)
|
||||||
|
#define CONF4 (18)
|
||||||
|
#define CONF5 (5)
|
||||||
|
#define CONF6 (17)
|
||||||
|
#define CONF7 (16)
|
||||||
|
#define CONF8 (4)
|
||||||
|
#define CONF9 (2)
|
||||||
|
|
||||||
|
#define M1A (25)
|
||||||
|
#define M1B (32)
|
||||||
|
#define M2A (27)
|
||||||
|
#define M2B (26)
|
||||||
|
|
||||||
|
#define GPIO_INPUT_PIN_SEL ((1ULL<<TYPE) | (1ULL<<IN1) | (1ULL<<CONF1) | (1ULL<<CONF2) | (1ULL<<CONF3) | (1ULL<<CONF4) | (1ULL<<CONF5) | (1ULL<<CONF6) | (1ULL<<CONF7) | (1ULL<<CONF8) | (1ULL<<CONF9))
|
||||||
|
//end of configuration pins section
|
||||||
|
|
||||||
|
|
||||||
|
//addressable LED section
|
||||||
|
#include "driver/rmt_tx.h"
|
||||||
|
//#include "led_strip_encoder.h"
|
||||||
|
|
||||||
|
#define RMT_LED_STRIP_RESOLUTION_HZ 10000000 // 10MHz resolution, 1 tick = 0.1us (led strip needs a high resolution)
|
||||||
|
#define RMT_LED_STRIP_GPIO_NUM 0
|
||||||
|
|
||||||
|
#define EXAMPLE_LED_NUMBERS 24
|
||||||
|
extern uint8_t led_strip_pixels[EXAMPLE_LED_NUMBERS * 3];
|
||||||
|
|
||||||
|
//end of addressable LED section
|
||||||
|
|
||||||
|
//motor section
|
||||||
|
#include "driver/ledc.h"
|
||||||
|
#define LEDC_HS_TIMER LEDC_TIMER_0
|
||||||
|
#define LEDC_HS_MODE LEDC_HIGH_SPEED_MODE
|
||||||
|
#define LEDC_HS_CH0_GPIO (25)
|
||||||
|
#define LEDC_HS_CH0_CHANNEL LEDC_CHANNEL_0
|
||||||
|
#define LEDC_HS_CH1_GPIO (32)
|
||||||
|
#define LEDC_HS_CH1_CHANNEL LEDC_CHANNEL_1
|
||||||
|
#define LEDC_LS_TIMER LEDC_TIMER_1
|
||||||
|
#define LEDC_LS_MODE LEDC_LOW_SPEED_MODE
|
||||||
|
#define LEDC_LS_CH2_GPIO (27)
|
||||||
|
#define LEDC_LS_CH2_CHANNEL LEDC_CHANNEL_2
|
||||||
|
#define LEDC_LS_CH3_GPIO (26)
|
||||||
|
#define LEDC_LS_CH3_CHANNEL LEDC_CHANNEL_3
|
||||||
|
#define MOTOR_MAX_VALUE 1023
|
||||||
|
#define SEUIL_MOTEUR 200
|
||||||
|
|
||||||
|
#define LEDC_TEST_CH_NUM (4)
|
||||||
|
#define LEDC_TEST_DUTY (4000)
|
||||||
|
#define LEDC_TEST_FADE_TIME (3000)
|
||||||
|
|
||||||
|
//end of motor section
|
||||||
|
|
||||||
|
//adc section
|
||||||
|
#include "esp_adc/adc_oneshot.h"
|
||||||
|
//#include "esp_adc/adc_cali.h"
|
||||||
|
//#include "esp_adc/adc_cali_scheme.h"
|
||||||
|
#define BATT_ADC ADC_CHANNEL_5
|
||||||
|
#define THR_ADC ADC_CHANNEL_6
|
||||||
|
#define DIR_ADC ADC_CHANNEL_7
|
||||||
|
#define EXAMPLE_ADC_ATTEN ADC_ATTEN_DB_11
|
||||||
|
|
||||||
|
//end of adc section
|
||||||
|
|
||||||
|
//FinistRC section
|
||||||
|
// URL des broker, pour l'instant ce sont les memes
|
||||||
|
#define CONFIG_BROKER_URL_BATEAU "mqtt://openwrt.lan"
|
||||||
|
#define CONFIG_BROKER_URL_VOITURE "mqtt://openwrt.lan"
|
||||||
|
#define DEFAULT_TIMER_VALUE 180 // 3 minutes = 180 secondes
|
||||||
|
#define TRANSMIT_PERIOD_INTERVAL 100 // 100 millisecondes entre les trames
|
||||||
|
#define SIZE_TOPIC 25 // longueur des noms des topic
|
||||||
|
|
||||||
|
#define TOPIC_TIMER_BATEAU "/B/timer"
|
||||||
|
|
||||||
|
|
||||||
|
typedef enum {
|
||||||
|
BATEAU,
|
||||||
|
RADIO_BATEAU,
|
||||||
|
VOITURE,
|
||||||
|
RADIO_VOITURE,
|
||||||
|
STARTER_VOITURE,
|
||||||
|
STARTER_BATEAU
|
||||||
|
} model_t;
|
||||||
|
|
||||||
|
typedef enum {
|
||||||
|
BATEAU_RECEIVING,
|
||||||
|
BATEAU_SLEEP
|
||||||
|
} state_bateau_t;
|
||||||
|
|
||||||
|
typedef enum {
|
||||||
|
RADIO_BATEAU_TRANSMITTING,
|
||||||
|
RADIO_BATEAU_SLEEP
|
||||||
|
} state_radio_bateau_t;
|
||||||
|
|
||||||
|
typedef enum {
|
||||||
|
VOITURE_RECEIVING,
|
||||||
|
VOITURE_SLEEP
|
||||||
|
} state_voiture_t;
|
||||||
|
|
||||||
|
typedef enum {
|
||||||
|
RADIO_VOITURE_TRANSMITTING,
|
||||||
|
RADIO_VOITURE_SLEEP
|
||||||
|
} state_radio_voiture_t;
|
||||||
|
|
||||||
|
extern model_t QUISUISJE;
|
||||||
|
extern int idModele;
|
||||||
|
extern int idGroup;
|
||||||
|
extern networkType_t networkType;
|
||||||
|
extern state_bateau_t state_bateau;
|
||||||
|
extern state_radio_bateau_t state_radio_bateau;
|
||||||
|
extern state_voiture_t state_voiture;
|
||||||
|
extern state_radio_voiture_t state_radio_voiture;
|
||||||
|
extern int timerGlobal;
|
||||||
|
extern bool voitureGO;
|
||||||
|
extern bool bateauGO;
|
||||||
|
extern int dataReceived,gazReceived,dirReceived;
|
||||||
|
extern esp_mqtt_client_handle_t clientMqtt;
|
||||||
|
// End of FinistRC section
|
||||||
|
|
||||||
|
void boardInit(void);
|
||||||
|
void initWS2812(void);
|
||||||
|
void initMotor(void);
|
||||||
|
void initAdc(void);
|
||||||
|
|
||||||
|
void setMotor(uint32_t speedA, bool directionA,uint32_t speedB, bool directionB);
|
||||||
|
void getBatt(int *value);
|
||||||
|
void getDir(int *value);
|
||||||
|
void getThr(int *value);
|
||||||
|
|
||||||
|
|
||||||
|
#endif
|
||||||
480
main/loop.c
Normal file
480
main/loop.c
Normal file
@@ -0,0 +1,480 @@
|
|||||||
|
#include "bsp.h"
|
||||||
|
|
||||||
|
int timerGlobal;
|
||||||
|
state_bateau_t state_bateau;
|
||||||
|
state_radio_bateau_t state_radio_bateau;
|
||||||
|
state_voiture_t state_voiture;
|
||||||
|
state_radio_voiture_t state_radio_voiture;
|
||||||
|
esp_mqtt_client_handle_t clientMqtt;
|
||||||
|
int dataReceived,gazReceived,dirReceived;
|
||||||
|
bool voitureGO;
|
||||||
|
bool bateauGO;
|
||||||
|
|
||||||
|
// WIFI_PS_NONE WIFI_PS_MIN_MODEM
|
||||||
|
void setup_bateau(void){
|
||||||
|
wifi_init_sta(networkType);
|
||||||
|
esp_mqtt_client_config_t mqtt_cfg = {
|
||||||
|
.broker.address.uri = CONFIG_BROKER_URL_BATEAU,
|
||||||
|
};
|
||||||
|
clientMqtt = esp_mqtt_client_init(&mqtt_cfg);
|
||||||
|
/* The last argument may be used to pass data to the event handler, in this example mqtt_event_handler */
|
||||||
|
esp_mqtt_client_register_event(clientMqtt, ESP_EVENT_ANY_ID, mqtt_event_handler_bateau, NULL);
|
||||||
|
esp_mqtt_client_start(clientMqtt);
|
||||||
|
|
||||||
|
}
|
||||||
|
void setup_radio_bateau(void){
|
||||||
|
wifi_init_sta(networkType);
|
||||||
|
esp_mqtt_client_config_t mqtt_cfg = {
|
||||||
|
.broker.address.uri = CONFIG_BROKER_URL_BATEAU,
|
||||||
|
};
|
||||||
|
clientMqtt = esp_mqtt_client_init(&mqtt_cfg);
|
||||||
|
/* The last argument may be used to pass data to the event handler, in this example mqtt_event_handler */
|
||||||
|
esp_mqtt_client_register_event(clientMqtt, ESP_EVENT_ANY_ID, mqtt_event_handler_radio_bateau, NULL);
|
||||||
|
esp_mqtt_client_start(clientMqtt);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void setup_starter_bateau(void){
|
||||||
|
wifi_init_sta(networkType);
|
||||||
|
esp_mqtt_client_config_t mqtt_cfg = {
|
||||||
|
.broker.address.uri = CONFIG_BROKER_URL_BATEAU,
|
||||||
|
};
|
||||||
|
clientMqtt = esp_mqtt_client_init(&mqtt_cfg);
|
||||||
|
/* The last argument may be used to pass data to the event handler, in this example mqtt_event_handler */
|
||||||
|
esp_mqtt_client_register_event(clientMqtt, ESP_EVENT_ANY_ID, mqtt_event_handler_starter_bateau, NULL);
|
||||||
|
esp_mqtt_client_start(clientMqtt);
|
||||||
|
bateauGO=false;
|
||||||
|
}
|
||||||
|
void setup_voiture(void){
|
||||||
|
/*
|
||||||
|
static const char *TAG = "BATEAU";
|
||||||
|
int i;
|
||||||
|
while(1)
|
||||||
|
{
|
||||||
|
for(i=0;i<1001;i+=100)
|
||||||
|
{
|
||||||
|
setMotor(i,false,i,true);
|
||||||
|
ESP_LOGI(TAG, "speed=%d", i);
|
||||||
|
vTaskDelay(2000 / portTICK_PERIOD_MS);
|
||||||
|
}
|
||||||
|
for(i=0;i<1001;i+=100)
|
||||||
|
{
|
||||||
|
setMotor(i,true,i,false);
|
||||||
|
ESP_LOGI(TAG, "speed=%d", i);
|
||||||
|
vTaskDelay(2000 / portTICK_PERIOD_MS);
|
||||||
|
}
|
||||||
|
}//*/
|
||||||
|
wifi_init_sta(networkType);
|
||||||
|
esp_mqtt_client_config_t mqtt_cfg = {
|
||||||
|
.broker.address.uri = CONFIG_BROKER_URL_VOITURE,
|
||||||
|
};
|
||||||
|
clientMqtt = esp_mqtt_client_init(&mqtt_cfg);
|
||||||
|
/* The last argument may be used to pass data to the event handler, in this example mqtt_event_handler */
|
||||||
|
esp_mqtt_client_register_event(clientMqtt, ESP_EVENT_ANY_ID, mqtt_event_handler_voiture, NULL);
|
||||||
|
esp_mqtt_client_start(clientMqtt);
|
||||||
|
voitureGO=false;
|
||||||
|
// setMotor(6000,false,6000,true);;
|
||||||
|
}
|
||||||
|
void setup_radio_voiture(void){
|
||||||
|
wifi_init_sta(networkType);
|
||||||
|
esp_mqtt_client_config_t mqtt_cfg = {
|
||||||
|
.broker.address.uri = CONFIG_BROKER_URL_VOITURE,
|
||||||
|
};
|
||||||
|
clientMqtt = esp_mqtt_client_init(&mqtt_cfg);
|
||||||
|
/* The last argument may be used to pass data to the event handler, in this example mqtt_event_handler */
|
||||||
|
esp_mqtt_client_register_event(clientMqtt, ESP_EVENT_ANY_ID, mqtt_event_handler_radio_voiture, NULL);
|
||||||
|
esp_mqtt_client_start(clientMqtt);
|
||||||
|
voitureGO=false;
|
||||||
|
}
|
||||||
|
|
||||||
|
void setup_starter_voiture(void){
|
||||||
|
wifi_init_sta(networkType);
|
||||||
|
esp_mqtt_client_config_t mqtt_cfg = {
|
||||||
|
.broker.address.uri = CONFIG_BROKER_URL_VOITURE,
|
||||||
|
};
|
||||||
|
clientMqtt = esp_mqtt_client_init(&mqtt_cfg);
|
||||||
|
/* The last argument may be used to pass data to the event handler, in this example mqtt_event_handler */
|
||||||
|
esp_mqtt_client_register_event(clientMqtt, ESP_EVENT_ANY_ID, mqtt_event_handler_starter_voiture, NULL);
|
||||||
|
esp_mqtt_client_start(clientMqtt);
|
||||||
|
voitureGO=false;
|
||||||
|
}
|
||||||
|
|
||||||
|
void loop_bateau(void ){
|
||||||
|
|
||||||
|
|
||||||
|
static const char *TAG = "BATEAU";
|
||||||
|
char battStr[5],topicBatt[SIZE_TOPIC];
|
||||||
|
char data[2];
|
||||||
|
int dir,thr,batt;
|
||||||
|
int M1,M2;
|
||||||
|
uint32_t speedM1, speedM2;
|
||||||
|
bool dirM1,dirM2;
|
||||||
|
uint32_t timer=0;
|
||||||
|
int msg_id;
|
||||||
|
|
||||||
|
dataReceived=0;
|
||||||
|
sprintf(topicBatt,"/B/%02d/%03d/Batt/rx",idGroup,idModele);
|
||||||
|
|
||||||
|
while(1){
|
||||||
|
switch(state_bateau){
|
||||||
|
case BATEAU_RECEIVING:
|
||||||
|
if(dataReceived){
|
||||||
|
dir=dirReceived;
|
||||||
|
thr=gazReceived;
|
||||||
|
dataReceived=0;
|
||||||
|
M1=(-thr+dir)*5;
|
||||||
|
if(M1>MOTOR_MAX_VALUE)M1=MOTOR_MAX_VALUE;
|
||||||
|
if(M1<-MOTOR_MAX_VALUE)M1=-MOTOR_MAX_VALUE;
|
||||||
|
M2=-(-thr-dir)*5;
|
||||||
|
if(M2>MOTOR_MAX_VALUE)M2=MOTOR_MAX_VALUE;
|
||||||
|
if(M2<-MOTOR_MAX_VALUE)M2=-MOTOR_MAX_VALUE;
|
||||||
|
if(M1>0){
|
||||||
|
speedM1=M1;
|
||||||
|
dirM1=true;
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
speedM1=-M1;
|
||||||
|
dirM1=false;
|
||||||
|
}
|
||||||
|
if(M2>0){
|
||||||
|
speedM2=M2;
|
||||||
|
dirM2=true;
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
speedM2=-M2;
|
||||||
|
dirM2=false;
|
||||||
|
}
|
||||||
|
setMotor(speedM1,dirM1,speedM2,dirM2);
|
||||||
|
ESP_LOGI(TAG, "DIR=%d\tTHR=%d\tM1=%d\tM2=%dspeedM1=%lu\tdirM1=%s\tspeedM2=%lu\tdirM2=%s\t", dir,thr,M1,M2,speedM1,dirM1 ? "true" : "false",speedM2,dirM2 ? "true" : "false");
|
||||||
|
timer=0;
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
if(timer++>10){// timeout de 1 seconde
|
||||||
|
esp_wifi_set_ps(WIFI_PS_MIN_MODEM);//minimise la conso, augmente la latence
|
||||||
|
state_bateau=BATEAU_SLEEP;
|
||||||
|
setMotor(0,dirM1,0,dirM2);
|
||||||
|
vTaskDelay(TRANSMIT_PERIOD_INTERVAL / portTICK_PERIOD_MS);
|
||||||
|
getBatt(&batt);
|
||||||
|
sprintf(battStr,"%04d",batt);
|
||||||
|
msg_id = esp_mqtt_client_publish(clientMqtt, topicBatt, battStr, 0, 1, 1);
|
||||||
|
}
|
||||||
|
vTaskDelay(TRANSMIT_PERIOD_INTERVAL / portTICK_PERIOD_MS);
|
||||||
|
vTaskDelay(TRANSMIT_PERIOD_INTERVAL / portTICK_PERIOD_MS);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case BATEAU_SLEEP: if(dataReceived){
|
||||||
|
esp_wifi_set_ps(WIFI_PS_NONE);
|
||||||
|
state_bateau=BATEAU_RECEIVING;
|
||||||
|
}
|
||||||
|
vTaskDelay(TRANSMIT_PERIOD_INTERVAL / portTICK_PERIOD_MS);// necessaire pour éviter les pb de wathdog
|
||||||
|
break;
|
||||||
|
default:esp_wifi_set_ps(WIFI_PS_MIN_MODEM);//minimise la conso, augmente la latence
|
||||||
|
state_bateau=BATEAU_SLEEP;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void loop_radio_bateau(void ){
|
||||||
|
static const char *TAG = "RADIO_BATEAU";
|
||||||
|
char topicTx[SIZE_TOPIC],topicBatt[SIZE_TOPIC],battStr[5];
|
||||||
|
char data[10];
|
||||||
|
int dir,thr,batt;
|
||||||
|
int msg_id;
|
||||||
|
|
||||||
|
sprintf(topicTx,"/B/%02d/%03d/com/gazdir",idGroup,idModele);
|
||||||
|
sprintf(topicBatt,"/B/%02d/%03d/Batt/radio",idGroup,idModele);
|
||||||
|
|
||||||
|
while(1){
|
||||||
|
switch(state_radio_bateau){
|
||||||
|
case RADIO_BATEAU_TRANSMITTING:
|
||||||
|
if(bateauGO){
|
||||||
|
getDir(&dir);
|
||||||
|
getThr(&thr);
|
||||||
|
sprintf(data,"%03d;%03d;",dir,thr);
|
||||||
|
msg_id = esp_mqtt_client_publish(clientMqtt, topicTx, data, 0, 0, 0);
|
||||||
|
//ESP_LOGI(TAG, "DIR=%d\tTHR=%d\tBATT=%d", dir,thr,batt);
|
||||||
|
vTaskDelay(TRANSMIT_PERIOD_INTERVAL / portTICK_PERIOD_MS);
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
esp_wifi_set_ps(WIFI_PS_MIN_MODEM);
|
||||||
|
state_radio_bateau=RADIO_BATEAU_SLEEP;
|
||||||
|
getBatt(&batt);
|
||||||
|
sprintf(battStr,"%04d",batt);
|
||||||
|
msg_id = esp_mqtt_client_publish(clientMqtt, topicBatt, battStr, 0, 1, 1);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case RADIO_BATEAU_SLEEP: if(bateauGO){
|
||||||
|
esp_wifi_set_ps(WIFI_PS_NONE);//minimise la conso, augmente la latence
|
||||||
|
state_radio_bateau=RADIO_BATEAU_TRANSMITTING;
|
||||||
|
}
|
||||||
|
vTaskDelay(TRANSMIT_PERIOD_INTERVAL / portTICK_PERIOD_MS);// necessaire pour éviter les pb de wathdog
|
||||||
|
break;
|
||||||
|
default:esp_wifi_set_ps(WIFI_PS_MIN_MODEM);
|
||||||
|
state_radio_bateau=RADIO_BATEAU_SLEEP;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void loop_starter_bateau(void){
|
||||||
|
static const char *TAG = "STARTER_BATEAU";
|
||||||
|
char topicGo[SIZE_TOPIC],topicBatt[SIZE_TOPIC],battStr[5];
|
||||||
|
char data='0';
|
||||||
|
int batt;
|
||||||
|
uint32_t timer=0;
|
||||||
|
int msg_id;
|
||||||
|
|
||||||
|
sprintf(topicGo,"/B/%02d/go",idGroup);
|
||||||
|
sprintf(topicBatt,"/B/%02d/%03d/Batt/tx",idGroup,idModele);
|
||||||
|
|
||||||
|
while(1){
|
||||||
|
switch(state_radio_bateau){
|
||||||
|
case RADIO_BATEAU_TRANSMITTING:
|
||||||
|
if(timer>0 ){
|
||||||
|
vTaskDelay(TRANSMIT_PERIOD_INTERVAL / portTICK_PERIOD_MS);
|
||||||
|
timer--;
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
//esp_wifi_set_ps(WIFI_PS_NONE);
|
||||||
|
data='0';
|
||||||
|
msg_id = esp_mqtt_client_publish(clientMqtt, topicGo, &data, 0, 1, 1);
|
||||||
|
state_radio_bateau=RADIO_BATEAU_SLEEP;
|
||||||
|
getBatt(&batt);
|
||||||
|
sprintf(battStr,"%04d",batt);
|
||||||
|
msg_id = esp_mqtt_client_publish(clientMqtt, topicBatt, battStr, 0, 1, 1);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case RADIO_BATEAU_SLEEP: if(gpio_get_level(IN1)==0){
|
||||||
|
//esp_wifi_set_ps(WIFI_PS_MIN_MODEM);//minimise la conso, augmente la latence
|
||||||
|
data='1';
|
||||||
|
msg_id = esp_mqtt_client_publish(clientMqtt, topicGo, &data, 0, 1, 1);
|
||||||
|
state_radio_bateau=RADIO_BATEAU_TRANSMITTING;
|
||||||
|
timer=timerGlobal;
|
||||||
|
}
|
||||||
|
vTaskDelay(TRANSMIT_PERIOD_INTERVAL / portTICK_PERIOD_MS);// necessaire pour éviter les pb de wathdog
|
||||||
|
break;
|
||||||
|
default:esp_wifi_set_ps(WIFI_PS_MIN_MODEM);
|
||||||
|
state_radio_bateau=RADIO_BATEAU_SLEEP;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void loop_voiture(void ){
|
||||||
|
static const char *TAG = "VOITURE";
|
||||||
|
char battStr[5],topicBatt[SIZE_TOPIC];
|
||||||
|
char data[2];
|
||||||
|
int dir,thr,batt;
|
||||||
|
int M1,M2;
|
||||||
|
uint32_t speedM1, speedM2;
|
||||||
|
bool dirM1,dirM2;
|
||||||
|
uint32_t timer=0;
|
||||||
|
int msg_id;
|
||||||
|
|
||||||
|
dataReceived=0;
|
||||||
|
sprintf(topicBatt,"/V/%02d/%03d/Batt/rx",idGroup,idModele);
|
||||||
|
|
||||||
|
while(1){
|
||||||
|
switch(state_voiture){
|
||||||
|
case VOITURE_RECEIVING:
|
||||||
|
if(dataReceived){
|
||||||
|
dir=dirReceived;
|
||||||
|
thr=gazReceived;
|
||||||
|
dataReceived=0;
|
||||||
|
M1=(-thr+dir)*5;
|
||||||
|
if(M1>MOTOR_MAX_VALUE)M1=MOTOR_MAX_VALUE;
|
||||||
|
if(M1<-MOTOR_MAX_VALUE)M1=-MOTOR_MAX_VALUE;
|
||||||
|
M2=-(-thr-dir)*5;
|
||||||
|
if(M2>MOTOR_MAX_VALUE)M2=MOTOR_MAX_VALUE;
|
||||||
|
if(M2<-MOTOR_MAX_VALUE)M2=-MOTOR_MAX_VALUE;
|
||||||
|
if(M1>0){
|
||||||
|
speedM1=M1;
|
||||||
|
dirM1=true;
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
speedM1=-M1;
|
||||||
|
dirM1=false;
|
||||||
|
}
|
||||||
|
if(M2>0){
|
||||||
|
speedM2=M2;
|
||||||
|
dirM2=true;
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
speedM2=-M2;
|
||||||
|
dirM2=false;
|
||||||
|
}
|
||||||
|
setMotor(speedM1,dirM1,speedM2,dirM2);
|
||||||
|
//ESP_LOGI(TAG, "DIR=%d\tTHR=%d\tM1=%d\tM2=%dspeedM1=%lu\tdirM1=%s\tspeedM2=%lu\tdirM2=%s\t", dir,thr,M1,M2,speedM1,dirM1 ? "true" : "false",speedM2,dirM2 ? "true" : "false");
|
||||||
|
timer=0;
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
if(timer++>10){// timeout de 1 seconde
|
||||||
|
esp_wifi_set_ps(WIFI_PS_MIN_MODEM);//minimise la conso, augmente la latence
|
||||||
|
state_voiture=VOITURE_SLEEP;
|
||||||
|
setMotor(0,dirM1,0,dirM2);
|
||||||
|
getBatt(&batt);
|
||||||
|
sprintf(battStr,"%04d",batt);
|
||||||
|
ESP_LOGI(TAG, "battStr=%s batt=%d\t", battStr,batt);
|
||||||
|
msg_id = esp_mqtt_client_publish(clientMqtt, topicBatt, battStr, 0, 1, 1);
|
||||||
|
}
|
||||||
|
vTaskDelay(TRANSMIT_PERIOD_INTERVAL / portTICK_PERIOD_MS);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case VOITURE_SLEEP: if(dataReceived){
|
||||||
|
esp_wifi_set_ps(WIFI_PS_NONE);
|
||||||
|
state_voiture=VOITURE_RECEIVING;
|
||||||
|
}
|
||||||
|
vTaskDelay(TRANSMIT_PERIOD_INTERVAL / portTICK_PERIOD_MS);// necessaire pour éviter les pb de wathdog
|
||||||
|
break;
|
||||||
|
default:esp_wifi_set_ps(WIFI_PS_MIN_MODEM);//minimise la conso, augmente la latence
|
||||||
|
state_voiture=VOITURE_SLEEP;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
void loop_radio_voiture(void ){
|
||||||
|
static const char *TAG = "RADIO_VOITURE";
|
||||||
|
char topicTx[SIZE_TOPIC],topicBatt[SIZE_TOPIC],battStr[5];
|
||||||
|
char data[10];
|
||||||
|
int dir,thr,batt;
|
||||||
|
int msg_id;
|
||||||
|
|
||||||
|
sprintf(topicTx,"/V/%02d/%03d/com/gazdir",idGroup,idModele);
|
||||||
|
sprintf(topicBatt,"/V/%02d/%03d/Batt/radio",idGroup,idModele);
|
||||||
|
|
||||||
|
while(1){
|
||||||
|
switch(state_radio_voiture){
|
||||||
|
case RADIO_VOITURE_TRANSMITTING:
|
||||||
|
if(voitureGO){
|
||||||
|
getDir(&dir);
|
||||||
|
getThr(&thr);
|
||||||
|
sprintf(data,"%03d;%03d;",dir,thr);
|
||||||
|
msg_id = esp_mqtt_client_publish(clientMqtt, topicTx, data, 0, 0, 0);
|
||||||
|
//ESP_LOGI(TAG, "DIR=%d\tTHR=%d\tBATT=%d", dir,thr,batt);
|
||||||
|
vTaskDelay(TRANSMIT_PERIOD_INTERVAL / portTICK_PERIOD_MS);
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
esp_wifi_set_ps(WIFI_PS_MIN_MODEM);//minimise la conso, augmente la latence
|
||||||
|
state_radio_voiture=RADIO_VOITURE_SLEEP;
|
||||||
|
getBatt(&batt);
|
||||||
|
sprintf(battStr,"%04d",batt);
|
||||||
|
msg_id = esp_mqtt_client_publish(clientMqtt, topicBatt, battStr, 0, 1, 1);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case RADIO_VOITURE_SLEEP: if(voitureGO){
|
||||||
|
esp_wifi_set_ps(WIFI_PS_NONE);
|
||||||
|
state_radio_voiture=RADIO_VOITURE_TRANSMITTING;
|
||||||
|
}
|
||||||
|
vTaskDelay(TRANSMIT_PERIOD_INTERVAL / portTICK_PERIOD_MS);// necessaire pour éviter les pb de wathdog
|
||||||
|
break;
|
||||||
|
default:esp_wifi_set_ps(WIFI_PS_MIN_MODEM);//minimise la conso, augmente la latence
|
||||||
|
state_radio_voiture=RADIO_VOITURE_SLEEP;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
void loop_starter_voiture(void){
|
||||||
|
static const char *TAG = "STARTER_VOITURE";
|
||||||
|
char topicGo[SIZE_TOPIC],topicBatt[SIZE_TOPIC],battStr[5];
|
||||||
|
char data='0';
|
||||||
|
int batt;
|
||||||
|
uint32_t timer=0;
|
||||||
|
int msg_id;
|
||||||
|
|
||||||
|
sprintf(topicGo,"/V/%02d/go",idGroup);
|
||||||
|
sprintf(topicBatt,"/V/%02d/%03d/Batt/tx",idGroup,idModele);
|
||||||
|
|
||||||
|
while(1){
|
||||||
|
switch(state_radio_voiture){
|
||||||
|
case RADIO_VOITURE_TRANSMITTING:
|
||||||
|
if(timer>0 ){
|
||||||
|
vTaskDelay(TRANSMIT_PERIOD_INTERVAL / portTICK_PERIOD_MS);
|
||||||
|
timer--;
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
//esp_wifi_set_ps(WIFI_PS_NONE);
|
||||||
|
data='0';
|
||||||
|
msg_id = esp_mqtt_client_publish(clientMqtt, topicGo, &data, 0, 1, 1);
|
||||||
|
state_radio_voiture=RADIO_VOITURE_SLEEP;
|
||||||
|
getBatt(&batt);
|
||||||
|
sprintf(battStr,"%04d",batt);
|
||||||
|
msg_id = esp_mqtt_client_publish(clientMqtt, topicBatt, battStr, 0, 1, 1);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case RADIO_VOITURE_SLEEP: if(gpio_get_level(IN1)==0){
|
||||||
|
//esp_wifi_set_ps(WIFI_PS_MIN_MODEM);//minimise la conso, augmente la latence
|
||||||
|
data='1';
|
||||||
|
msg_id = esp_mqtt_client_publish(clientMqtt, topicGo, &data, 0, 1, 1);
|
||||||
|
state_radio_voiture=RADIO_VOITURE_TRANSMITTING;
|
||||||
|
timer=timerGlobal;
|
||||||
|
}
|
||||||
|
vTaskDelay(TRANSMIT_PERIOD_INTERVAL / portTICK_PERIOD_MS);// necessaire pour éviter les pb de wathdog
|
||||||
|
break;
|
||||||
|
default:esp_wifi_set_ps(WIFI_PS_MIN_MODEM);
|
||||||
|
state_radio_voiture=RADIO_VOITURE_SLEEP;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void setupBoard(void){
|
||||||
|
switch (QUISUISJE){
|
||||||
|
case BATEAU:
|
||||||
|
setup_bateau();
|
||||||
|
break;
|
||||||
|
case RADIO_BATEAU:
|
||||||
|
setup_radio_bateau();
|
||||||
|
break;
|
||||||
|
case STARTER_BATEAU:
|
||||||
|
setup_starter_bateau();
|
||||||
|
break;
|
||||||
|
case VOITURE:
|
||||||
|
setup_voiture();
|
||||||
|
break;
|
||||||
|
case RADIO_VOITURE:
|
||||||
|
setup_radio_voiture();
|
||||||
|
break;
|
||||||
|
case STARTER_VOITURE:
|
||||||
|
setup_starter_voiture();
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
void loop_board(void){
|
||||||
|
switch (QUISUISJE){
|
||||||
|
case BATEAU:
|
||||||
|
loop_bateau();
|
||||||
|
break;
|
||||||
|
case RADIO_BATEAU:
|
||||||
|
loop_radio_bateau();
|
||||||
|
break;
|
||||||
|
case STARTER_BATEAU:
|
||||||
|
loop_starter_bateau();
|
||||||
|
break;
|
||||||
|
case VOITURE:
|
||||||
|
loop_voiture();
|
||||||
|
break;
|
||||||
|
case RADIO_VOITURE:
|
||||||
|
loop_radio_voiture();
|
||||||
|
break;
|
||||||
|
case STARTER_VOITURE:
|
||||||
|
loop_starter_voiture();
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
19
main/loop.h
Normal file
19
main/loop.h
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
#ifndef LOOP_FINISTRC
|
||||||
|
#define LOOP_FINISTRC
|
||||||
|
|
||||||
|
void setupBoard(void);
|
||||||
|
void loop_board(void);
|
||||||
|
/*
|
||||||
|
void loop_bateau(void );
|
||||||
|
void loop_radio_bateau(void );
|
||||||
|
void loop_voiture(void );
|
||||||
|
void loop_radio_voiture(void );
|
||||||
|
void loop_starter_voiture(void);
|
||||||
|
|
||||||
|
void setup_bateau(void);
|
||||||
|
void setup_radio_bateau(void);
|
||||||
|
void setup_voiture(void);
|
||||||
|
void setup_radio_voiture(void);
|
||||||
|
void setup_starter_voiture(void);
|
||||||
|
*/
|
||||||
|
#endif
|
||||||
425
main/mqttHandler.c
Normal file
425
main/mqttHandler.c
Normal file
@@ -0,0 +1,425 @@
|
|||||||
|
#include "bsp.h"
|
||||||
|
|
||||||
|
static const char *TAG = "MQTT_FINISTRC";
|
||||||
|
static void log_error_if_nonzero(const char *message, int error_code)
|
||||||
|
{
|
||||||
|
if (error_code != 0) {
|
||||||
|
ESP_LOGE(TAG, "Last error %s: 0x%x", message, error_code);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void mqtt_event_handler_bateau(void *handler_args, esp_event_base_t base, int32_t event_id, void *event_data)
|
||||||
|
{
|
||||||
|
ESP_LOGD(TAG, "Event dispatched from event loop base=%s, event_id=%" PRIi32 "", base, event_id);
|
||||||
|
esp_mqtt_event_handle_t event = event_data;
|
||||||
|
esp_mqtt_client_handle_t client = event->client;
|
||||||
|
int msg_id;
|
||||||
|
char message[SIZE_TOPIC];
|
||||||
|
char *ptrData;
|
||||||
|
switch ((esp_mqtt_event_id_t)event_id) {
|
||||||
|
case MQTT_EVENT_CONNECTED:
|
||||||
|
ESP_LOGI(TAG, "MQTT_EVENT_CONNECTED");
|
||||||
|
char topicTx[SIZE_TOPIC];
|
||||||
|
sprintf(topicTx,"/B/%02d/%03d/com/gazdir",idGroup,idModele);
|
||||||
|
msg_id = esp_mqtt_client_subscribe(client, topicTx, 0);
|
||||||
|
ESP_LOGI(TAG, "sent subscribe successful, msg_id=%d", msg_id);
|
||||||
|
/*
|
||||||
|
mqtt_bat("bat_rx");
|
||||||
|
ESP_LOGI(TAG, "sent publish successful, msg_id=%d", msg_id);
|
||||||
|
msg_id = esp_mqtt_client_publish(client, "/"+localId+"/quoi", "bateau", 0, 1, 0);
|
||||||
|
ESP_LOGI(TAG, "sent publish successful, msg_id=%d", msg_id);
|
||||||
|
|
||||||
|
|
||||||
|
msg_id = esp_mqtt_client_subscribe(client, "/"+localId+"/confMD", 0);
|
||||||
|
ESP_LOGI(TAG, "sent subscribe successful, msg_id=%d", msg_id);
|
||||||
|
msg_id = esp_mqtt_client_subscribe(client, "/"+localId+"/confPO", 0);
|
||||||
|
ESP_LOGI(TAG, "sent subscribe successful, msg_id=%d", msg_id);
|
||||||
|
|
||||||
|
msg_id = esp_mqtt_client_subscribe(client, "/"+localId+"/xy", 0);
|
||||||
|
ESP_LOGI(TAG, "sent subscribe successful, msg_id=%d", msg_id);
|
||||||
|
*/
|
||||||
|
break;
|
||||||
|
case MQTT_EVENT_DISCONNECTED:
|
||||||
|
ESP_LOGI(TAG, "MQTT_EVENT_DISCONNECTED");
|
||||||
|
break;
|
||||||
|
|
||||||
|
case MQTT_EVENT_SUBSCRIBED:
|
||||||
|
ESP_LOGI(TAG, "MQTT_EVENT_SUBSCRIBED, msg_id=%d", event->msg_id);
|
||||||
|
//msg_id = esp_mqtt_client_publish(client, "/topic/qos0", "data", 0, 0, 0);
|
||||||
|
//ESP_LOGI(TAG, "sent publish successful, msg_id=%d", msg_id);
|
||||||
|
break;
|
||||||
|
case MQTT_EVENT_UNSUBSCRIBED:
|
||||||
|
ESP_LOGI(TAG, "MQTT_EVENT_UNSUBSCRIBED, msg_id=%d", event->msg_id);
|
||||||
|
break;
|
||||||
|
case MQTT_EVENT_PUBLISHED:
|
||||||
|
ESP_LOGI(TAG, "MQTT_EVENT_PUBLISHED, msg_id=%d", event->msg_id);
|
||||||
|
break;
|
||||||
|
case MQTT_EVENT_DATA:
|
||||||
|
ESP_LOGI(TAG, "MQTT_EVENT_DATA");
|
||||||
|
//printf("%.*s\r\n", event->data_len, event->data);
|
||||||
|
sprintf(message,"%.*s\r\n", event->data_len, event->data);
|
||||||
|
printf(message);
|
||||||
|
dirReceived=atoi(event->data);
|
||||||
|
ptrData=strchr(message,';');
|
||||||
|
ptrData++;
|
||||||
|
gazReceived=atoi(ptrData);
|
||||||
|
dataReceived=1;
|
||||||
|
|
||||||
|
/*
|
||||||
|
printf("\nTOPIC=%.*s\r\n", event->topic_len, event->topic);
|
||||||
|
printf("DATA=%.*s\r\n", event->data_len, event->data);
|
||||||
|
|
||||||
|
//s_led_state=!s_led_state;
|
||||||
|
if(event->data[0]=='0')
|
||||||
|
gpio_set_level(15, 0 );
|
||||||
|
else
|
||||||
|
gpio_set_level(15, 1 );
|
||||||
|
*/
|
||||||
|
break;
|
||||||
|
case MQTT_EVENT_ERROR:
|
||||||
|
ESP_LOGI(TAG, "MQTT_EVENT_ERROR");
|
||||||
|
if (event->error_handle->error_type == MQTT_ERROR_TYPE_TCP_TRANSPORT) {
|
||||||
|
log_error_if_nonzero("reported from esp-tls", event->error_handle->esp_tls_last_esp_err);
|
||||||
|
log_error_if_nonzero("reported from tls stack", event->error_handle->esp_tls_stack_err);
|
||||||
|
log_error_if_nonzero("captured as transport's socket errno", event->error_handle->esp_transport_sock_errno);
|
||||||
|
ESP_LOGI(TAG, "Last errno string (%s)", strerror(event->error_handle->esp_transport_sock_errno));
|
||||||
|
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
ESP_LOGI(TAG, "Other event id:%d", event->event_id);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
void mqtt_event_handler_radio_bateau(void *handler_args, esp_event_base_t base, int32_t event_id, void *event_data)
|
||||||
|
{
|
||||||
|
ESP_LOGD(TAG, "Event dispatched from event loop base=%s, event_id=%" PRIi32 "", base, event_id);
|
||||||
|
esp_mqtt_event_handle_t event = event_data;
|
||||||
|
esp_mqtt_client_handle_t client = event->client;
|
||||||
|
int msg_id;
|
||||||
|
char topicGo[SIZE_TOPIC];
|
||||||
|
switch ((esp_mqtt_event_id_t)event_id) {
|
||||||
|
case MQTT_EVENT_CONNECTED:
|
||||||
|
ESP_LOGI(TAG, "MQTT_EVENT_CONNECTED");
|
||||||
|
sprintf(topicGo,"/B/%02d/go",idGroup);
|
||||||
|
msg_id = esp_mqtt_client_subscribe(client, topicGo, 1);
|
||||||
|
ESP_LOGI(TAG, "sent subscribe successful, msg_id=%d", msg_id);
|
||||||
|
break;
|
||||||
|
case MQTT_EVENT_DISCONNECTED:
|
||||||
|
ESP_LOGI(TAG, "MQTT_EVENT_DISCONNECTED");
|
||||||
|
break;
|
||||||
|
|
||||||
|
case MQTT_EVENT_SUBSCRIBED:
|
||||||
|
ESP_LOGI(TAG, "MQTT_EVENT_SUBSCRIBED, msg_id=%d", event->msg_id);
|
||||||
|
//msg_id = esp_mqtt_client_publish(client, "/topic/qos0", "data", 0, 0, 0);
|
||||||
|
//ESP_LOGI(TAG, "sent publish successful, msg_id=%d", msg_id);
|
||||||
|
break;
|
||||||
|
case MQTT_EVENT_UNSUBSCRIBED:
|
||||||
|
ESP_LOGI(TAG, "MQTT_EVENT_UNSUBSCRIBED, msg_id=%d", event->msg_id);
|
||||||
|
break;
|
||||||
|
case MQTT_EVENT_PUBLISHED:
|
||||||
|
ESP_LOGI(TAG, "MQTT_EVENT_PUBLISHED, msg_id=%d", event->msg_id);
|
||||||
|
break;
|
||||||
|
case MQTT_EVENT_DATA:
|
||||||
|
ESP_LOGI(TAG, "MQTT_EVENT_DATA");
|
||||||
|
// printf("TOPIC=%.*s\r\n", event->topic_len, event->topic);
|
||||||
|
// printf("DATA=%.*s\r\n", event->data_len, event->data);
|
||||||
|
|
||||||
|
//char topi[30], data[30];
|
||||||
|
//sprintf(topi,"%.*s", event->topic_len, event->topic);
|
||||||
|
//sprintf(data,"%.*s", event->data_len, event->data);
|
||||||
|
|
||||||
|
/* ESP_LOGI(TAG, "TOPIC=%c", topi);
|
||||||
|
ESP_LOGI(TAG, "DATA=%c", data);
|
||||||
|
if (strcmp(topi, "XY") == 0) {
|
||||||
|
// https://arduino-stackexchange-com.translate.goog/questions/1013/how-do-i-split-an-incoming-string?_x_tr_sl=auto&_x_tr_tl=fr&_x_tr_hl=fr
|
||||||
|
int id1, id2, id3;
|
||||||
|
int pos1, pos2, pos3;
|
||||||
|
char* buf = "1:90&2:80&3:180";
|
||||||
|
int n = sscanf(buf, "%d:%d&%d:%d&%d:%d", &id1, &pos1, &id2, &pos2, &id3, &pos3);
|
||||||
|
Serial.print(F("n="));
|
||||||
|
Serial.println(n);
|
||||||
|
Serial.print(F("id1="));
|
||||||
|
Serial.print(id1);
|
||||||
|
Serial.print(F(", pos1="));
|
||||||
|
Serial.println(pos1);
|
||||||
|
Serial.print(F("id2="));
|
||||||
|
Serial.print(id2);
|
||||||
|
Serial.print(F(", pos2="));
|
||||||
|
Serial.println(pos2);
|
||||||
|
Serial.print(F("id3="));
|
||||||
|
Serial.print(id3);
|
||||||
|
Serial.print(F(", pos3="));
|
||||||
|
Serial.println(pos3);
|
||||||
|
}//*/
|
||||||
|
/*
|
||||||
|
printf("\nTOPIC=%.*s\r\n", event->topic_len, event->topic);
|
||||||
|
printf("DATA=%.*s\r\n", event->data_len, event->data);
|
||||||
|
|
||||||
|
//s_led_state=!s_led_state;
|
||||||
|
if(event->data[0]=='0')
|
||||||
|
gpio_set_level(15, 0 );
|
||||||
|
else
|
||||||
|
gpio_set_level(15, 1 );
|
||||||
|
*/
|
||||||
|
sprintf(topicGo,"/B/%02d/go",idGroup);
|
||||||
|
if (strncmp(event->topic, topicGo, event->topic_len) == 0) {
|
||||||
|
ESP_LOGI(TAG, "GO value received");
|
||||||
|
if(event->data[0]=='0'){
|
||||||
|
bateauGO=false;
|
||||||
|
ESP_LOGI(TAG, "GO=0 ");
|
||||||
|
}
|
||||||
|
else if(event->data[0]=='1'){
|
||||||
|
bateauGO=true;
|
||||||
|
ESP_LOGI(TAG, "GO=1");
|
||||||
|
}
|
||||||
|
else ESP_LOGI(TAG, "invalid GO value");
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case MQTT_EVENT_ERROR:
|
||||||
|
ESP_LOGI(TAG, "MQTT_EVENT_ERROR");
|
||||||
|
if (event->error_handle->error_type == MQTT_ERROR_TYPE_TCP_TRANSPORT) {
|
||||||
|
log_error_if_nonzero("reported from esp-tls", event->error_handle->esp_tls_last_esp_err);
|
||||||
|
log_error_if_nonzero("reported from tls stack", event->error_handle->esp_tls_stack_err);
|
||||||
|
log_error_if_nonzero("captured as transport's socket errno", event->error_handle->esp_transport_sock_errno);
|
||||||
|
ESP_LOGI(TAG, "Last errno string (%s)", strerror(event->error_handle->esp_transport_sock_errno));
|
||||||
|
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
ESP_LOGI(TAG, "Other event id:%d", event->event_id);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
void mqtt_event_handler_starter_bateau(void *handler_args, esp_event_base_t base, int32_t event_id, void *event_data)
|
||||||
|
{
|
||||||
|
ESP_LOGD(TAG, "Event dispatched from event loop base=%s, event_id=%" PRIi32 "", base, event_id);
|
||||||
|
esp_mqtt_event_handle_t event = event_data;
|
||||||
|
esp_mqtt_client_handle_t client = event->client;
|
||||||
|
int msg_id;
|
||||||
|
char topicTimer[SIZE_TOPIC];
|
||||||
|
switch ((esp_mqtt_event_id_t)event_id) {
|
||||||
|
case MQTT_EVENT_CONNECTED:
|
||||||
|
ESP_LOGI(TAG, "MQTT_EVENT_CONNECTED");
|
||||||
|
sprintf(topicTimer,"/B/%02d/timer",idGroup);
|
||||||
|
msg_id = esp_mqtt_client_subscribe(client, topicTimer, 1);
|
||||||
|
ESP_LOGI(TAG, "sent subscribe successful, msg_id=%d", msg_id);
|
||||||
|
break;
|
||||||
|
case MQTT_EVENT_DISCONNECTED:
|
||||||
|
ESP_LOGI(TAG, "MQTT_EVENT_DISCONNECTED");
|
||||||
|
break;
|
||||||
|
|
||||||
|
case MQTT_EVENT_SUBSCRIBED:
|
||||||
|
ESP_LOGI(TAG, "MQTT_EVENT_SUBSCRIBED, msg_id=%d", event->msg_id);
|
||||||
|
break;
|
||||||
|
case MQTT_EVENT_UNSUBSCRIBED:
|
||||||
|
ESP_LOGI(TAG, "MQTT_EVENT_UNSUBSCRIBED, msg_id=%d", event->msg_id);
|
||||||
|
break;
|
||||||
|
case MQTT_EVENT_PUBLISHED:
|
||||||
|
ESP_LOGI(TAG, "MQTT_EVENT_PUBLISHED, msg_id=%d", event->msg_id);
|
||||||
|
break;
|
||||||
|
case MQTT_EVENT_DATA:
|
||||||
|
ESP_LOGI(TAG, "MQTT_EVENT_DATA");
|
||||||
|
sprintf(topicTimer,"/B/%02d/timer",idGroup);
|
||||||
|
if (strncmp(event->topic, topicTimer, event->topic_len) == 0) {
|
||||||
|
ESP_LOGI(TAG, "TIMER value received");
|
||||||
|
int dataReceived=atoi(event->data);
|
||||||
|
if(dataReceived>0){
|
||||||
|
timerGlobal=1000/TRANSMIT_PERIOD_INTERVAL*dataReceived;
|
||||||
|
ESP_LOGI(TAG, "value received=%d ,timerGlobal= %d",dataReceived,timerGlobal);
|
||||||
|
}
|
||||||
|
else ESP_LOGI(TAG, "invalid timer value");
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case MQTT_EVENT_ERROR:
|
||||||
|
ESP_LOGI(TAG, "MQTT_EVENT_ERROR");
|
||||||
|
if (event->error_handle->error_type == MQTT_ERROR_TYPE_TCP_TRANSPORT) {
|
||||||
|
log_error_if_nonzero("reported from esp-tls", event->error_handle->esp_tls_last_esp_err);
|
||||||
|
log_error_if_nonzero("reported from tls stack", event->error_handle->esp_tls_stack_err);
|
||||||
|
log_error_if_nonzero("captured as transport's socket errno", event->error_handle->esp_transport_sock_errno);
|
||||||
|
ESP_LOGI(TAG, "Last errno string (%s)", strerror(event->error_handle->esp_transport_sock_errno));
|
||||||
|
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
ESP_LOGI(TAG, "Other event id:%d", event->event_id);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
void mqtt_event_handler_voiture(void *handler_args, esp_event_base_t base, int32_t event_id, void *event_data)
|
||||||
|
{
|
||||||
|
ESP_LOGD(TAG, "Event dispatched from event loop base=%s, event_id=%" PRIi32 "", base, event_id);
|
||||||
|
esp_mqtt_event_handle_t event = event_data;
|
||||||
|
esp_mqtt_client_handle_t client = event->client;
|
||||||
|
int msg_id;
|
||||||
|
char topicTx[SIZE_TOPIC];
|
||||||
|
char *ptrData,message[SIZE_TOPIC];
|
||||||
|
|
||||||
|
switch ((esp_mqtt_event_id_t)event_id) {
|
||||||
|
case MQTT_EVENT_CONNECTED:
|
||||||
|
ESP_LOGI(TAG, "MQTT_EVENT_CONNECTED");
|
||||||
|
sprintf(topicTx,"/V/%02d/%03d/com/gazdir",idGroup,idModele);
|
||||||
|
msg_id = esp_mqtt_client_subscribe(client, topicTx, 0);
|
||||||
|
ESP_LOGI(TAG, "sent subscribe successful, msg_id=%d", msg_id);
|
||||||
|
|
||||||
|
break;
|
||||||
|
case MQTT_EVENT_DISCONNECTED:
|
||||||
|
ESP_LOGI(TAG, "MQTT_EVENT_DISCONNECTED");
|
||||||
|
break;
|
||||||
|
|
||||||
|
case MQTT_EVENT_SUBSCRIBED:
|
||||||
|
ESP_LOGI(TAG, "MQTT_EVENT_SUBSCRIBED, msg_id=%d", event->msg_id);
|
||||||
|
break;
|
||||||
|
case MQTT_EVENT_UNSUBSCRIBED:
|
||||||
|
ESP_LOGI(TAG, "MQTT_EVENT_UNSUBSCRIBED, msg_id=%d", event->msg_id);
|
||||||
|
break;
|
||||||
|
case MQTT_EVENT_PUBLISHED:
|
||||||
|
ESP_LOGI(TAG, "MQTT_EVENT_PUBLISHED, msg_id=%d", event->msg_id);
|
||||||
|
break;
|
||||||
|
case MQTT_EVENT_DATA:
|
||||||
|
ESP_LOGI(TAG, "MQTT_EVENT_DATA");
|
||||||
|
printf("%.*s\r\n", event->data_len, event->data);
|
||||||
|
sprintf(message,"%.*s\r\n", event->data_len, event->data);
|
||||||
|
dirReceived=atoi(event->data);
|
||||||
|
ptrData=strchr(message,';');
|
||||||
|
ptrData++;
|
||||||
|
gazReceived=atoi(ptrData);
|
||||||
|
dataReceived=1;
|
||||||
|
break;
|
||||||
|
case MQTT_EVENT_ERROR:
|
||||||
|
ESP_LOGI(TAG, "MQTT_EVENT_ERROR");
|
||||||
|
if (event->error_handle->error_type == MQTT_ERROR_TYPE_TCP_TRANSPORT) {
|
||||||
|
log_error_if_nonzero("reported from esp-tls", event->error_handle->esp_tls_last_esp_err);
|
||||||
|
log_error_if_nonzero("reported from tls stack", event->error_handle->esp_tls_stack_err);
|
||||||
|
log_error_if_nonzero("captured as transport's socket errno", event->error_handle->esp_transport_sock_errno);
|
||||||
|
ESP_LOGI(TAG, "Last errno string (%s)", strerror(event->error_handle->esp_transport_sock_errno));
|
||||||
|
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
ESP_LOGI(TAG, "Other event id:%d", event->event_id);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
void mqtt_event_handler_radio_voiture(void *handler_args, esp_event_base_t base, int32_t event_id, void *event_data)
|
||||||
|
{
|
||||||
|
ESP_LOGD(TAG, "Event dispatched from event loop base=%s, event_id=%" PRIi32 "", base, event_id);
|
||||||
|
esp_mqtt_event_handle_t event = event_data;
|
||||||
|
esp_mqtt_client_handle_t client = event->client;
|
||||||
|
int msg_id;
|
||||||
|
char topicGo[SIZE_TOPIC];
|
||||||
|
|
||||||
|
switch ((esp_mqtt_event_id_t)event_id) {
|
||||||
|
case MQTT_EVENT_CONNECTED:
|
||||||
|
ESP_LOGI(TAG, "MQTT_EVENT_CONNECTED");
|
||||||
|
sprintf(topicGo,"/V/%02d/go",idGroup);
|
||||||
|
msg_id = esp_mqtt_client_subscribe(client, topicGo, 1);
|
||||||
|
ESP_LOGI(TAG, "sent subscribe successful, msg_id=%d", msg_id);
|
||||||
|
break;
|
||||||
|
case MQTT_EVENT_DISCONNECTED:
|
||||||
|
ESP_LOGI(TAG, "MQTT_EVENT_DISCONNECTED");
|
||||||
|
break;
|
||||||
|
|
||||||
|
case MQTT_EVENT_SUBSCRIBED:
|
||||||
|
ESP_LOGI(TAG, "MQTT_EVENT_SUBSCRIBED, msg_id=%d", event->msg_id);
|
||||||
|
break;
|
||||||
|
case MQTT_EVENT_UNSUBSCRIBED:
|
||||||
|
ESP_LOGI(TAG, "MQTT_EVENT_UNSUBSCRIBED, msg_id=%d", event->msg_id);
|
||||||
|
break;
|
||||||
|
case MQTT_EVENT_PUBLISHED:
|
||||||
|
ESP_LOGI(TAG, "MQTT_EVENT_PUBLISHED, msg_id=%d", event->msg_id);
|
||||||
|
break;
|
||||||
|
case MQTT_EVENT_DATA:
|
||||||
|
ESP_LOGI(TAG, "MQTT_EVENT_DATA");
|
||||||
|
sprintf(topicGo,"/V/%02d/go",idGroup);
|
||||||
|
if (strncmp(event->topic, topicGo, event->topic_len) == 0) {
|
||||||
|
ESP_LOGI(TAG, "GO value received");
|
||||||
|
if(event->data[0]=='0'){
|
||||||
|
voitureGO=false;
|
||||||
|
ESP_LOGI(TAG, "GO=0 ");
|
||||||
|
}
|
||||||
|
else if(event->data[0]=='1'){
|
||||||
|
voitureGO=true;
|
||||||
|
ESP_LOGI(TAG, "GO=1");
|
||||||
|
}
|
||||||
|
else ESP_LOGI(TAG, "invalid GO value");
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
case MQTT_EVENT_ERROR:
|
||||||
|
ESP_LOGI(TAG, "MQTT_EVENT_ERROR");
|
||||||
|
if (event->error_handle->error_type == MQTT_ERROR_TYPE_TCP_TRANSPORT) {
|
||||||
|
log_error_if_nonzero("reported from esp-tls", event->error_handle->esp_tls_last_esp_err);
|
||||||
|
log_error_if_nonzero("reported from tls stack", event->error_handle->esp_tls_stack_err);
|
||||||
|
log_error_if_nonzero("captured as transport's socket errno", event->error_handle->esp_transport_sock_errno);
|
||||||
|
ESP_LOGI(TAG, "Last errno string (%s)", strerror(event->error_handle->esp_transport_sock_errno));
|
||||||
|
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
ESP_LOGI(TAG, "Other event id:%d", event->event_id);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
void mqtt_event_handler_starter_voiture(void *handler_args, esp_event_base_t base, int32_t event_id, void *event_data)
|
||||||
|
{
|
||||||
|
ESP_LOGD(TAG, "Event dispatched from event loop base=%s, event_id=%" PRIi32 "", base, event_id);
|
||||||
|
esp_mqtt_event_handle_t event = event_data;
|
||||||
|
esp_mqtt_client_handle_t client = event->client;
|
||||||
|
int msg_id;
|
||||||
|
char topicTimer[SIZE_TOPIC];
|
||||||
|
switch ((esp_mqtt_event_id_t)event_id) {
|
||||||
|
case MQTT_EVENT_CONNECTED:
|
||||||
|
ESP_LOGI(TAG, "MQTT_EVENT_CONNECTED");
|
||||||
|
sprintf(topicTimer,"/V/%02d/timer",idGroup);
|
||||||
|
msg_id = esp_mqtt_client_subscribe(client, topicTimer, 1);
|
||||||
|
ESP_LOGI(TAG, "sent subscribe successful, msg_id=%d", msg_id);
|
||||||
|
break;
|
||||||
|
case MQTT_EVENT_DISCONNECTED:
|
||||||
|
ESP_LOGI(TAG, "MQTT_EVENT_DISCONNECTED");
|
||||||
|
break;
|
||||||
|
|
||||||
|
case MQTT_EVENT_SUBSCRIBED:
|
||||||
|
ESP_LOGI(TAG, "MQTT_EVENT_SUBSCRIBED, msg_id=%d", event->msg_id);
|
||||||
|
break;
|
||||||
|
case MQTT_EVENT_UNSUBSCRIBED:
|
||||||
|
ESP_LOGI(TAG, "MQTT_EVENT_UNSUBSCRIBED, msg_id=%d", event->msg_id);
|
||||||
|
break;
|
||||||
|
case MQTT_EVENT_PUBLISHED:
|
||||||
|
ESP_LOGI(TAG, "MQTT_EVENT_PUBLISHED, msg_id=%d", event->msg_id);
|
||||||
|
break;
|
||||||
|
case MQTT_EVENT_DATA:
|
||||||
|
ESP_LOGI(TAG, "MQTT_EVENT_DATA");
|
||||||
|
sprintf(topicTimer,"/V/%02d/timer",idGroup);
|
||||||
|
if (strncmp(event->topic, topicTimer, event->topic_len) == 0) {
|
||||||
|
ESP_LOGI(TAG, "TIMER value received");
|
||||||
|
int dataReceived=atoi(event->data);
|
||||||
|
if(dataReceived>0){
|
||||||
|
timerGlobal=1000/TRANSMIT_PERIOD_INTERVAL*dataReceived;
|
||||||
|
ESP_LOGI(TAG, "timerGlobal= %d",timerGlobal);
|
||||||
|
}
|
||||||
|
else ESP_LOGI(TAG, "invalid timer value");
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case MQTT_EVENT_ERROR:
|
||||||
|
ESP_LOGI(TAG, "MQTT_EVENT_ERROR");
|
||||||
|
if (event->error_handle->error_type == MQTT_ERROR_TYPE_TCP_TRANSPORT) {
|
||||||
|
log_error_if_nonzero("reported from esp-tls", event->error_handle->esp_tls_last_esp_err);
|
||||||
|
log_error_if_nonzero("reported from tls stack", event->error_handle->esp_tls_stack_err);
|
||||||
|
log_error_if_nonzero("captured as transport's socket errno", event->error_handle->esp_transport_sock_errno);
|
||||||
|
ESP_LOGI(TAG, "Last errno string (%s)", strerror(event->error_handle->esp_transport_sock_errno));
|
||||||
|
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
ESP_LOGI(TAG, "Other event id:%d", event->event_id);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
void mqtt_bat(char ouca) {
|
||||||
|
int adcValue;
|
||||||
|
getBatt(&adcValue);
|
||||||
|
msg_id = esp_mqtt_client_publish(client, "/"+localId +"/"+ ouca, adcValue, 0, 1, 0);
|
||||||
|
ESP_LOGI(TAG, "sent publish successful, msg_id=%d", msg_id);
|
||||||
|
}//*/
|
||||||
13
main/mqttHandler.h
Normal file
13
main/mqttHandler.h
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
#ifndef MQTT_FINISTRC
|
||||||
|
#define MQTT_FINISTRC
|
||||||
|
|
||||||
|
#include "bsp.h"
|
||||||
|
|
||||||
|
void mqtt_event_handler_bateau(void *handler_args, esp_event_base_t base, int32_t event_id, void *event_data);
|
||||||
|
void mqtt_event_handler_radio_bateau(void *handler_args, esp_event_base_t base, int32_t event_id, void *event_data);
|
||||||
|
void mqtt_event_handler_voiture(void *handler_args, esp_event_base_t base, int32_t event_id, void *event_data);
|
||||||
|
void mqtt_event_handler_radio_voiture(void *handler_args, esp_event_base_t base, int32_t event_id, void *event_data);
|
||||||
|
void mqtt_event_handler_starter_voiture(void *handler_args, esp_event_base_t base, int32_t event_id, void *event_data);
|
||||||
|
void mqtt_event_handler_starter_bateau(void *handler_args, esp_event_base_t base, int32_t event_id, void *event_data);
|
||||||
|
|
||||||
|
#endif
|
||||||
174
main/wifi.c
Normal file
174
main/wifi.c
Normal file
@@ -0,0 +1,174 @@
|
|||||||
|
/* WiFi station Example
|
||||||
|
|
||||||
|
This example code is in the Public Domain (or CC0 licensed, at your option.)
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, this
|
||||||
|
software is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
|
||||||
|
CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
*/
|
||||||
|
#include "bsp.h"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* The examples use WiFi configuration that you can set via project configuration menu
|
||||||
|
|
||||||
|
If you'd rather not, just change the below entries to strings with
|
||||||
|
the config you want - ie #define EXAMPLE_WIFI_SSID "mywifissid"
|
||||||
|
*/
|
||||||
|
#define BATEAU_ESP_WIFI_SSID "APbateaux"
|
||||||
|
#define BATEAU_ESP_WIFI_PASS "finistrc"
|
||||||
|
#define VOITURE_ESP_WIFI_SSID "APvoitures"
|
||||||
|
#define VOITURE_ESP_WIFI_PASS "finistrc"
|
||||||
|
#define EXAMPLE_ESP_MAXIMUM_RETRY 10
|
||||||
|
|
||||||
|
#if CONFIG_ESP_WPA3_SAE_PWE_HUNT_AND_PECK
|
||||||
|
#define ESP_WIFI_SAE_MODE WPA3_SAE_PWE_HUNT_AND_PECK
|
||||||
|
#define EXAMPLE_H2E_IDENTIFIER ""
|
||||||
|
#elif CONFIG_ESP_WPA3_SAE_PWE_HASH_TO_ELEMENT
|
||||||
|
#define ESP_WIFI_SAE_MODE WPA3_SAE_PWE_HASH_TO_ELEMENT
|
||||||
|
#define EXAMPLE_H2E_IDENTIFIER CONFIG_ESP_WIFI_PW_ID
|
||||||
|
#elif CONFIG_ESP_WPA3_SAE_PWE_BOTH
|
||||||
|
#define ESP_WIFI_SAE_MODE WPA3_SAE_PWE_BOTH
|
||||||
|
#define EXAMPLE_H2E_IDENTIFIER CONFIG_ESP_WIFI_PW_ID
|
||||||
|
#endif
|
||||||
|
#if CONFIG_ESP_WIFI_AUTH_OPEN
|
||||||
|
#define ESP_WIFI_SCAN_AUTH_MODE_THRESHOLD WIFI_AUTH_OPEN
|
||||||
|
#elif CONFIG_ESP_WIFI_AUTH_WEP
|
||||||
|
#define ESP_WIFI_SCAN_AUTH_MODE_THRESHOLD WIFI_AUTH_WEP
|
||||||
|
#elif CONFIG_ESP_WIFI_AUTH_WPA_PSK
|
||||||
|
#define ESP_WIFI_SCAN_AUTH_MODE_THRESHOLD WIFI_AUTH_WPA_PSK
|
||||||
|
#elif CONFIG_ESP_WIFI_AUTH_WPA2_PSK
|
||||||
|
#define ESP_WIFI_SCAN_AUTH_MODE_THRESHOLD WIFI_AUTH_WPA2_PSK
|
||||||
|
#elif CONFIG_ESP_WIFI_AUTH_WPA_WPA2_PSK
|
||||||
|
#define ESP_WIFI_SCAN_AUTH_MODE_THRESHOLD WIFI_AUTH_WPA_WPA2_PSK
|
||||||
|
#elif CONFIG_ESP_WIFI_AUTH_WPA3_PSK
|
||||||
|
#define ESP_WIFI_SCAN_AUTH_MODE_THRESHOLD WIFI_AUTH_WPA3_PSK
|
||||||
|
#elif CONFIG_ESP_WIFI_AUTH_WPA2_WPA3_PSK
|
||||||
|
#define ESP_WIFI_SCAN_AUTH_MODE_THRESHOLD WIFI_AUTH_WPA2_WPA3_PSK
|
||||||
|
#elif CONFIG_ESP_WIFI_AUTH_WAPI_PSK
|
||||||
|
#define ESP_WIFI_SCAN_AUTH_MODE_THRESHOLD WIFI_AUTH_WAPI_PSK
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* FreeRTOS event group to signal when we are connected*/
|
||||||
|
static EventGroupHandle_t s_wifi_event_group;
|
||||||
|
|
||||||
|
/* The event group allows multiple bits for each event, but we only care about two events:
|
||||||
|
* - we are connected to the AP with an IP
|
||||||
|
* - we failed to connect after the maximum amount of retries */
|
||||||
|
#define WIFI_CONNECTED_BIT BIT0
|
||||||
|
#define WIFI_FAIL_BIT BIT1
|
||||||
|
|
||||||
|
static const char *TAG = "wifi station";
|
||||||
|
|
||||||
|
static int s_retry_num = 0;
|
||||||
|
|
||||||
|
|
||||||
|
static void event_handler(void* arg, esp_event_base_t event_base,
|
||||||
|
int32_t event_id, void* event_data)
|
||||||
|
{
|
||||||
|
if (event_base == WIFI_EVENT && event_id == WIFI_EVENT_STA_START) {
|
||||||
|
esp_wifi_connect();
|
||||||
|
} else if (event_base == WIFI_EVENT && event_id == WIFI_EVENT_STA_DISCONNECTED) {
|
||||||
|
if (s_retry_num < EXAMPLE_ESP_MAXIMUM_RETRY) {
|
||||||
|
esp_wifi_connect();
|
||||||
|
s_retry_num++;
|
||||||
|
ESP_LOGI(TAG, "retry to connect to the AP");
|
||||||
|
} else {
|
||||||
|
xEventGroupSetBits(s_wifi_event_group, WIFI_FAIL_BIT);
|
||||||
|
}
|
||||||
|
ESP_LOGI(TAG,"connect to the AP fail");
|
||||||
|
} else if (event_base == IP_EVENT && event_id == IP_EVENT_STA_GOT_IP) {
|
||||||
|
ip_event_got_ip_t* event = (ip_event_got_ip_t*) event_data;
|
||||||
|
ESP_LOGI(TAG, "got ip:" IPSTR, IP2STR(&event->ip_info.ip));
|
||||||
|
s_retry_num = 0;
|
||||||
|
xEventGroupSetBits(s_wifi_event_group, WIFI_CONNECTED_BIT);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void wifi_init_sta(uint32_t networkConfig)
|
||||||
|
{
|
||||||
|
s_wifi_event_group = xEventGroupCreate();
|
||||||
|
ESP_LOGI(TAG, "try connect wifi");
|
||||||
|
ESP_ERROR_CHECK(esp_netif_init());
|
||||||
|
ESP_LOGI(TAG, "try connect wifi 2");
|
||||||
|
ESP_ERROR_CHECK(esp_event_loop_create_default());
|
||||||
|
esp_netif_create_default_wifi_sta();
|
||||||
|
ESP_LOGI(TAG, "try connect wifi 3");
|
||||||
|
wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT();
|
||||||
|
ESP_ERROR_CHECK(esp_wifi_init(&cfg));
|
||||||
|
ESP_LOGI(TAG, "try connect wifi 4");
|
||||||
|
esp_event_handler_instance_t instance_any_id;
|
||||||
|
esp_event_handler_instance_t instance_got_ip;
|
||||||
|
ESP_ERROR_CHECK(esp_event_handler_instance_register(WIFI_EVENT,
|
||||||
|
ESP_EVENT_ANY_ID,
|
||||||
|
&event_handler,
|
||||||
|
NULL,
|
||||||
|
&instance_any_id));
|
||||||
|
ESP_ERROR_CHECK(esp_event_handler_instance_register(IP_EVENT,
|
||||||
|
IP_EVENT_STA_GOT_IP,
|
||||||
|
&event_handler,
|
||||||
|
NULL,
|
||||||
|
&instance_got_ip));
|
||||||
|
|
||||||
|
wifi_config_t * wifi_config;
|
||||||
|
wifi_config_t wifi_config_bateau = {
|
||||||
|
.sta = {
|
||||||
|
.ssid = BATEAU_ESP_WIFI_SSID,
|
||||||
|
.password = BATEAU_ESP_WIFI_PASS,
|
||||||
|
/* Authmode threshold resets to WPA2 as default if password matches WPA2 standards (pasword len => 8).
|
||||||
|
* If you want to connect the device to deprecated WEP/WPA networks, Please set the threshold value
|
||||||
|
* to WIFI_AUTH_WEP/WIFI_AUTH_WPA_PSK and set the password with length and format matching to
|
||||||
|
* WIFI_AUTH_WEP/WIFI_AUTH_WPA_PSK standards.
|
||||||
|
*/
|
||||||
|
//.threshold.authmode = ESP_WIFI_SCAN_AUTH_MODE_THRESHOLD,
|
||||||
|
//.sae_pwe_h2e = ESP_WIFI_SAE_MODE,
|
||||||
|
//.sae_h2e_identifier = EXAMPLE_H2E_IDENTIFIER,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
wifi_config_t wifi_config_voiture = {
|
||||||
|
.sta = {
|
||||||
|
.ssid = VOITURE_ESP_WIFI_SSID,
|
||||||
|
.password = VOITURE_ESP_WIFI_PASS,
|
||||||
|
/* Authmode threshold resets to WPA2 as default if password matches WPA2 standards (pasword len => 8).
|
||||||
|
* If you want to connect the device to deprecated WEP/WPA networks, Please set the threshold value
|
||||||
|
* to WIFI_AUTH_WEP/WIFI_AUTH_WPA_PSK and set the password with length and format matching to
|
||||||
|
* WIFI_AUTH_WEP/WIFI_AUTH_WPA_PSK standards.
|
||||||
|
*/
|
||||||
|
//.threshold.authmode = ESP_WIFI_SCAN_AUTH_MODE_THRESHOLD,
|
||||||
|
//.sae_pwe_h2e = ESP_WIFI_SAE_MODE,
|
||||||
|
//.sae_h2e_identifier = EXAMPLE_H2E_IDENTIFIER,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
if(networkConfig==NETWORKBATEAU)
|
||||||
|
wifi_config=&wifi_config_bateau;
|
||||||
|
if(networkConfig==NETWORKVOITURE)
|
||||||
|
wifi_config=&wifi_config_voiture;
|
||||||
|
|
||||||
|
ESP_ERROR_CHECK(esp_wifi_set_mode(WIFI_MODE_STA) );
|
||||||
|
ESP_ERROR_CHECK(esp_wifi_set_config(WIFI_IF_STA, wifi_config) );
|
||||||
|
ESP_ERROR_CHECK(esp_wifi_start() );
|
||||||
|
|
||||||
|
ESP_LOGI(TAG, "wifi_init_sta finished.");
|
||||||
|
|
||||||
|
/* Waiting until either the connection is established (WIFI_CONNECTED_BIT) or connection failed for the maximum
|
||||||
|
* number of re-tries (WIFI_FAIL_BIT). The bits are set by event_handler() (see above) */
|
||||||
|
EventBits_t bits = xEventGroupWaitBits(s_wifi_event_group,
|
||||||
|
WIFI_CONNECTED_BIT | WIFI_FAIL_BIT,
|
||||||
|
pdFALSE,
|
||||||
|
pdFALSE,
|
||||||
|
portMAX_DELAY);
|
||||||
|
|
||||||
|
/* xEventGroupWaitBits() returns the bits before the call returned, hence we can test which event actually
|
||||||
|
* happened. */
|
||||||
|
if (bits & WIFI_CONNECTED_BIT) {
|
||||||
|
ESP_LOGI(TAG, "connected to ap SSID:%s password:%s",
|
||||||
|
wifi_config->sta.ssid, wifi_config->sta.password);
|
||||||
|
} else if (bits & WIFI_FAIL_BIT) {
|
||||||
|
ESP_LOGI(TAG, "Failed to connect to SSID:%s, password:%s",
|
||||||
|
wifi_config->sta.ssid, wifi_config->sta.password);
|
||||||
|
vTaskDelay(1000 / portTICK_PERIOD_MS);
|
||||||
|
esp_restart();
|
||||||
|
} else {
|
||||||
|
ESP_LOGE(TAG, "UNEXPECTED EVENT");
|
||||||
|
}
|
||||||
|
}
|
||||||
26
main/wifi.h
Normal file
26
main/wifi.h
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
#ifndef WIFI_FINISTRC
|
||||||
|
#define WIFI_FINISTRC
|
||||||
|
|
||||||
|
#include "bsp.h"
|
||||||
|
|
||||||
|
#include <string.h>
|
||||||
|
#include "freertos/FreeRTOS.h"
|
||||||
|
#include "freertos/task.h"
|
||||||
|
#include "freertos/event_groups.h"
|
||||||
|
#include "esp_system.h"
|
||||||
|
#include "esp_wifi.h"
|
||||||
|
#include "esp_event.h"
|
||||||
|
#include "esp_log.h"
|
||||||
|
#include "nvs_flash.h"
|
||||||
|
|
||||||
|
#include "lwip/err.h"
|
||||||
|
#include "lwip/sys.h"
|
||||||
|
|
||||||
|
typedef enum {
|
||||||
|
NETWORKBATEAU,
|
||||||
|
NETWORKVOITURE
|
||||||
|
} networkType_t;
|
||||||
|
|
||||||
|
void wifi_init_sta(uint32_t networkConfig);
|
||||||
|
|
||||||
|
#endif
|
||||||
Reference in New Issue
Block a user