stash
This commit is contained in:
parent
7424a80945
commit
8b0020c387
7 changed files with 79 additions and 20 deletions
|
@ -8,6 +8,6 @@ RUN cd app/modules/sdk; export CT_EXPERIMENTAL=y; export CT_ALLOW_BUILD_AS_ROOT=
|
||||||
USER 0
|
USER 0
|
||||||
RUN apt remove --purge -y python2 && apt autoremove --purge -y && apt install -y python3 python3-serial
|
RUN apt remove --purge -y python2 && apt autoremove --purge -y && apt install -y python3 python3-serial
|
||||||
RUN apt install -y --reinstall python-is-python3
|
RUN apt install -y --reinstall python-is-python3
|
||||||
USER 0
|
USER 1000
|
||||||
WORKDIR /app
|
WORKDIR /app
|
||||||
ENV PATH=/app/modules/sdk/xtensa-lx106-elf/bin:$PATH
|
ENV PATH=/app/modules/sdk/xtensa-lx106-elf/bin:$PATH
|
||||||
|
|
|
@ -11,9 +11,9 @@
|
||||||
#include <espressif/esp_common.h>
|
#include <espressif/esp_common.h>
|
||||||
#include <esp/uart.h>
|
#include <esp/uart.h>
|
||||||
|
|
||||||
void user_init(void)
|
#define PUB_MSG_LEN 16
|
||||||
{
|
|
||||||
|
void user_init(void) {
|
||||||
uart_set_baud(0, 115200);
|
uart_set_baud(0, 115200);
|
||||||
printf("SDK version: %s\n", sdk_system_get_sdk_version());
|
printf("SDK version: %s\n", sdk_system_get_sdk_version());
|
||||||
|
|
||||||
|
@ -30,4 +30,11 @@ void user_init(void)
|
||||||
xTaskCreate(&httpd_task, "httpd_task", 1024, NULL, 2, NULL);
|
xTaskCreate(&httpd_task, "httpd_task", 1024, NULL, 2, NULL);
|
||||||
|
|
||||||
xTaskCreate(&lux_task, "lux_task", 512, NULL, 1, NULL);
|
xTaskCreate(&lux_task, "lux_task", 512, NULL, 1, NULL);
|
||||||
|
|
||||||
|
wifi_alive = xSemaphoreCreateBinary();
|
||||||
|
publish_queue = xQueueCreate(3, PUB_MSG_LEN);
|
||||||
|
|
||||||
|
xTaskCreate(&beat_task, "beat_task", 256, NULL, 3, NULL);
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,6 +3,7 @@
|
||||||
//
|
//
|
||||||
|
|
||||||
#include "mqtt.h"
|
#include "mqtt.h"
|
||||||
|
#include "wifi.h"
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
@ -22,15 +23,18 @@ extern "C" {
|
||||||
|
|
||||||
/* You can use http://test.mosquitto.org/ to test mqtt_client instead
|
/* You can use http://test.mosquitto.org/ to test mqtt_client instead
|
||||||
* of setting up your own MQTT server */
|
* of setting up your own MQTT server */
|
||||||
#define MQTT_HOST ("172.16.0.42")
|
//#define MQTT_HOST ("172.16.0.42")
|
||||||
|
#define MQTT_HOST ("10.23.42.187")
|
||||||
#define MQTT_PORT 1883
|
#define MQTT_PORT 1883
|
||||||
|
|
||||||
#define MQTT_USER NULL
|
#define MQTT_USER NULL
|
||||||
#define MQTT_PASS NULL
|
#define MQTT_PASS NULL
|
||||||
|
|
||||||
QueueHandle_t publish_queue;
|
|
||||||
#define PUB_MSG_LEN 16
|
#define PUB_MSG_LEN 16
|
||||||
|
|
||||||
|
QueueHandle_t publish_queue;
|
||||||
|
|
||||||
extern "C" void beat_task(void *pvParameters) {
|
extern "C" void beat_task(void *pvParameters) {
|
||||||
TickType_t xLastWakeTime = xTaskGetTickCount();
|
TickType_t xLastWakeTime = xTaskGetTickCount();
|
||||||
char msg[PUB_MSG_LEN];
|
char msg[PUB_MSG_LEN];
|
||||||
|
@ -98,13 +102,14 @@ extern "C" void mqtt_task(void *pvParameters) {
|
||||||
strcat(mqtt_client_id, get_my_id());
|
strcat(mqtt_client_id, get_my_id());
|
||||||
|
|
||||||
while (1) {
|
while (1) {
|
||||||
|
xSemaphoreTake(wifi_alive, portMAX_DELAY);
|
||||||
printf("%s: started\n\r", __func__);
|
printf("%s: started\n\r", __func__);
|
||||||
printf("%s: (Re)connecting to MQTT server %s ... ", __func__,
|
printf("%s: (Re)connecting to MQTT server %s ... ", __func__,
|
||||||
MQTT_HOST);
|
MQTT_HOST);
|
||||||
ret = mqtt_network_connect(&network, MQTT_HOST, MQTT_PORT);
|
ret = mqtt_network_connect(&network, MQTT_HOST, MQTT_PORT);
|
||||||
if(ret) {
|
if(ret) {
|
||||||
printf("error: %d\n\r", ret);
|
printf("error 1: %d\n\r", ret);
|
||||||
taskYIELD();
|
vTaskDelay(1000 / portTICK_PERIOD_MS);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
printf("done\n\r");
|
printf("done\n\r");
|
||||||
|
@ -121,9 +126,9 @@ extern "C" void mqtt_task(void *pvParameters) {
|
||||||
printf("Send MQTT connect ... ");
|
printf("Send MQTT connect ... ");
|
||||||
ret = mqtt_connect(&client, &data);
|
ret = mqtt_connect(&client, &data);
|
||||||
if(ret) {
|
if(ret) {
|
||||||
printf("error: %d\n\r", ret);
|
printf("error 2: %d\n\r", ret);
|
||||||
mqtt_network_disconnect(&network);
|
mqtt_network_disconnect(&network);
|
||||||
taskYIELD();
|
vTaskDelay(1000 / portTICK_PERIOD_MS);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
printf("done\r\n");
|
printf("done\r\n");
|
||||||
|
|
|
@ -5,6 +5,10 @@
|
||||||
#ifndef FIRMWARE_MQTT_H
|
#ifndef FIRMWARE_MQTT_H
|
||||||
#define FIRMWARE_MQTT_H
|
#define FIRMWARE_MQTT_H
|
||||||
|
|
||||||
|
|
||||||
|
#include <FreeRTOS.h>
|
||||||
|
#include <queue.h>
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
extern "C" {
|
extern "C" {
|
||||||
#endif
|
#endif
|
||||||
|
@ -12,6 +16,8 @@ extern "C" {
|
||||||
void mqtt_task(void *pvParameters);
|
void mqtt_task(void *pvParameters);
|
||||||
void beat_task(void *pvParameters);
|
void beat_task(void *pvParameters);
|
||||||
|
|
||||||
|
extern QueueHandle_t publish_queue;
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -60,7 +60,8 @@ void websocket_task(void *pvParameter) {
|
||||||
UNLOCK_TCPIP_CORE();
|
UNLOCK_TCPIP_CORE();
|
||||||
} else
|
} else
|
||||||
syslog("buffer too small -1\n");
|
syslog("buffer too small -1\n");
|
||||||
vTaskDelayMs(1000);
|
|
||||||
|
taskYIELD();
|
||||||
}
|
}
|
||||||
|
|
||||||
//Global Info
|
//Global Info
|
||||||
|
@ -94,7 +95,8 @@ void websocket_task(void *pvParameter) {
|
||||||
UNLOCK_TCPIP_CORE();
|
UNLOCK_TCPIP_CORE();
|
||||||
} else
|
} else
|
||||||
syslog("buffer too small 0\n");
|
syslog("buffer too small 0\n");
|
||||||
vTaskDelayMs(1000);
|
|
||||||
|
taskYIELD();
|
||||||
}
|
}
|
||||||
|
|
||||||
//Connection Info
|
//Connection Info
|
||||||
|
@ -117,7 +119,8 @@ void websocket_task(void *pvParameter) {
|
||||||
UNLOCK_TCPIP_CORE();
|
UNLOCK_TCPIP_CORE();
|
||||||
} else
|
} else
|
||||||
syslog("buffer too small 1\n");
|
syslog("buffer too small 1\n");
|
||||||
vTaskDelayMs(1000);
|
|
||||||
|
taskYIELD();
|
||||||
}
|
}
|
||||||
|
|
||||||
if(has_changed.wifi) {
|
if(has_changed.wifi) {
|
||||||
|
@ -175,7 +178,8 @@ void websocket_task(void *pvParameter) {
|
||||||
syslog("buffer too small 2\n");
|
syslog("buffer too small 2\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
vTaskDelayMs(1000);
|
|
||||||
|
taskYIELD();
|
||||||
|
|
||||||
if(opmode == STATION_MODE || opmode == STATIONAP_MODE) {
|
if(opmode == STATION_MODE || opmode == STATIONAP_MODE) {
|
||||||
uint8_t hwaddr[6];
|
uint8_t hwaddr[6];
|
||||||
|
@ -204,7 +208,8 @@ void websocket_task(void *pvParameter) {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
vTaskDelayMs(250);
|
|
||||||
|
taskYIELD();
|
||||||
{
|
{
|
||||||
uint8_t response[3];
|
uint8_t response[3];
|
||||||
uint16_t val;
|
uint16_t val;
|
||||||
|
@ -354,11 +359,11 @@ void websocket_cb(struct tcp_pcb *pcb, char *data, u16_t data_len,
|
||||||
if(ret == OK) {
|
if(ret == OK) {
|
||||||
if(cmd == 'R' || cmd == 'C') { // Restart
|
if(cmd == 'R' || cmd == 'C') { // Restart
|
||||||
printf("rebooting now");
|
printf("rebooting now");
|
||||||
vTaskDelay(1000 / portTICK_PERIOD_MS);
|
taskYIELD();
|
||||||
vPortEnterCritical();
|
vPortEnterCritical();
|
||||||
sdk_system_restart();
|
sdk_system_restart();
|
||||||
} else if(cmd == 'X') { // Clear Config
|
} else if(cmd == 'X') { // Clear Config
|
||||||
vTaskDelay(1000 / portTICK_PERIOD_MS);
|
taskYIELD();
|
||||||
system_clear_config();
|
system_clear_config();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -378,8 +383,9 @@ void websocket_open_cb(struct tcp_pcb *pcb, const char *uri) {
|
||||||
extern "C" void httpd_task(void *pvParameters) {
|
extern "C" void httpd_task(void *pvParameters) {
|
||||||
(void) pvParameters;
|
(void) pvParameters;
|
||||||
|
|
||||||
while (!uxSemaphoreGetCount(wifi_available_semaphore))
|
//while (!uxSemaphoreGetCount(wifi_available_semaphore))
|
||||||
vTaskDelay(500 / portTICK_PERIOD_MS);
|
// taskYIELD();
|
||||||
|
printf("httpd_task: wifi is available\n");
|
||||||
websocket_register_callbacks((tWsOpenHandler) websocket_open_cb, (tWsHandler) websocket_cb);
|
websocket_register_callbacks((tWsOpenHandler) websocket_open_cb, (tWsHandler) websocket_cb);
|
||||||
httpd_init();
|
httpd_init();
|
||||||
|
|
||||||
|
|
|
@ -32,6 +32,7 @@ char *wifi_ap_ssid = nullptr;
|
||||||
char *wifi_ap_password = nullptr;
|
char *wifi_ap_password = nullptr;
|
||||||
|
|
||||||
SemaphoreHandle_t wifi_available_semaphore = nullptr;
|
SemaphoreHandle_t wifi_available_semaphore = nullptr;
|
||||||
|
SemaphoreHandle_t wifi_alive = nullptr;
|
||||||
|
|
||||||
[[noreturn]] static void dns_task(void *pvParameters) {
|
[[noreturn]] static void dns_task(void *pvParameters) {
|
||||||
char *wifi_ap_ip_addr = nullptr;
|
char *wifi_ap_ip_addr = nullptr;
|
||||||
|
@ -347,5 +348,38 @@ extern "C" void wifi_task(void *pvParameters) {
|
||||||
xSemaphoreGive(wifi_available_semaphore);
|
xSemaphoreGive(wifi_available_semaphore);
|
||||||
|
|
||||||
//monitor loop connection here
|
//monitor loop connection here
|
||||||
vTaskDelete(nullptr);
|
uint8_t status = 0;
|
||||||
|
uint8_t retries = 30;
|
||||||
|
|
||||||
|
while (1) {
|
||||||
|
while ((status != STATION_GOT_IP) && (retries)) {
|
||||||
|
status = sdk_wifi_station_get_connect_status();
|
||||||
|
printf("%s: status = %d\n\r", __func__, status);
|
||||||
|
if(status == STATION_WRONG_PASSWORD) {
|
||||||
|
printf("WiFi: wrong password\n\r");
|
||||||
|
break;
|
||||||
|
} else if(status == STATION_NO_AP_FOUND) {
|
||||||
|
printf("WiFi: AP not found\n\r");
|
||||||
|
break;
|
||||||
|
} else if(status == STATION_CONNECT_FAIL) {
|
||||||
|
printf("WiFi: connection failed\r\n");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
vTaskDelay(1000 / portTICK_PERIOD_MS);
|
||||||
|
--retries;
|
||||||
|
}
|
||||||
|
if(status == STATION_GOT_IP) {
|
||||||
|
printf("WiFi: Connected\n\r");
|
||||||
|
xSemaphoreGive(wifi_alive);
|
||||||
|
taskYIELD();
|
||||||
|
}
|
||||||
|
|
||||||
|
while ((status = sdk_wifi_station_get_connect_status()) == STATION_GOT_IP) {
|
||||||
|
xSemaphoreGive(wifi_alive);
|
||||||
|
taskYIELD();
|
||||||
|
}
|
||||||
|
printf("WiFi: disconnected\n\r");
|
||||||
|
sdk_wifi_station_disconnect();
|
||||||
|
vTaskDelay(1000 / portTICK_PERIOD_MS);
|
||||||
|
}
|
||||||
}
|
}
|
|
@ -13,6 +13,7 @@ extern "C" {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
extern SemaphoreHandle_t wifi_available_semaphore;
|
extern SemaphoreHandle_t wifi_available_semaphore;
|
||||||
|
extern SemaphoreHandle_t wifi_alive;
|
||||||
|
|
||||||
void wifi_task(void *pvParameters);
|
void wifi_task(void *pvParameters);
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue