added mqtt connection logik
This commit is contained in:
96
src/main.cpp
96
src/main.cpp
@@ -2,6 +2,7 @@
|
||||
#include "dhcp_server.h"
|
||||
#include "hardware/i2c.h"
|
||||
#include "lwip/apps/httpd.h"
|
||||
#include "lwip/apps/mqtt.h"
|
||||
#include "pico/cyw43_arch.h"
|
||||
#include "pico/stdlib.h"
|
||||
#include "webserver.h"
|
||||
@@ -21,39 +22,88 @@ void ap_init() {
|
||||
dhcp_server_init(&dhcp_server, &gw, &mask);
|
||||
}
|
||||
|
||||
int main() {
|
||||
void reset_mqtt_config() {
|
||||
memset(saved_mqtt_address, 0, sizeof(saved_mqtt_address));
|
||||
memset(saved_mqtt_user, 0, sizeof(saved_mqtt_user));
|
||||
memset(saved_mqtt_password, 0, sizeof(saved_mqtt_password));
|
||||
saved_measure_frequency = 0;
|
||||
saved_post_frequency = 0;
|
||||
}
|
||||
|
||||
int connect_to_wifi() {
|
||||
int ret{};
|
||||
memset(saved_ssid, 0, sizeof(saved_ssid));
|
||||
memset(saved_password, 0, sizeof(saved_password));
|
||||
ap_init();
|
||||
while (saved_ssid[0] == '\0') {
|
||||
cyw43_arch_poll();
|
||||
sleep_ms(100);
|
||||
}
|
||||
cyw43_arch_disable_ap_mode();
|
||||
sleep_ms(500);
|
||||
cyw43_arch_enable_sta_mode();
|
||||
|
||||
ret = cyw43_arch_wifi_connect_timeout_ms(saved_ssid, saved_password,
|
||||
CYW43_AUTH_WPA2_MIXED_PSK, 10000);
|
||||
if (ret == 0) {
|
||||
return 0;
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
void mqtt_cb(mqtt_client_t *client, void *arg,
|
||||
mqtt_connection_status_t status) {
|
||||
int *mqtt_status{static_cast<int *>(arg)};
|
||||
*mqtt_status = (status == MQTT_CONNECT_ACCEPTED) ? 0 : 1;
|
||||
}
|
||||
|
||||
int connect_to_mqtt() {
|
||||
static int mqtt_status{-1};
|
||||
ip_addr_t broker_ip;
|
||||
static mqtt_client_t *client{};
|
||||
static mqtt_connect_client_info_t info{};
|
||||
|
||||
if (!ipaddr_aton(saved_mqtt_address, &broker_ip)) {
|
||||
return -1;
|
||||
}
|
||||
if (!client) {
|
||||
client = mqtt_client_new();
|
||||
}
|
||||
info.client_id = "sensor-pico";
|
||||
info.client_user = saved_mqtt_user;
|
||||
info.client_pass = saved_mqtt_password;
|
||||
|
||||
mqtt_client_connect(client, &broker_ip, saved_mqtt_port, mqtt_cb,
|
||||
&mqtt_status, &info);
|
||||
while (mqtt_status == -1) {
|
||||
cyw43_arch_poll();
|
||||
sleep_ms(100);
|
||||
}
|
||||
return mqtt_status;
|
||||
}
|
||||
|
||||
int main() {
|
||||
int mqtt_ret{-1};
|
||||
int wifi_status{1};
|
||||
stdio_init_all();
|
||||
sleep_ms(3000);
|
||||
cyw43_arch_init();
|
||||
httpd_init();
|
||||
|
||||
while (wifi_status != 0) {
|
||||
wifi_status = (connect_to_wifi() == 0) ? 0 : 1;
|
||||
}
|
||||
|
||||
while (true) {
|
||||
memset(saved_ssid, 0, sizeof(saved_ssid));
|
||||
memset(saved_password, 0, sizeof(saved_password));
|
||||
ap_init();
|
||||
printf("Return Code: %d\n", ret);
|
||||
|
||||
while (saved_ssid[0] == '\0') {
|
||||
while (saved_mqtt_address[0] == '\0') {
|
||||
cyw43_arch_poll();
|
||||
sleep_ms(100);
|
||||
sleep_ms(200);
|
||||
}
|
||||
cyw43_arch_disable_ap_mode();
|
||||
cyw43_arch_enable_sta_mode();
|
||||
|
||||
ret = cyw43_arch_wifi_connect_timeout_ms(saved_ssid, saved_password,
|
||||
CYW43_AUTH_WPA2_MIXED_PSK, 10000);
|
||||
if (ret == 0) {
|
||||
mqtt_ret = connect_to_mqtt();
|
||||
if (mqtt_ret) {
|
||||
break;
|
||||
}
|
||||
|
||||
while (true) {
|
||||
cyw43_arch_poll();
|
||||
cyw43_arch_gpio_put(CYW43_WL_GPIO_LED_PIN, 1);
|
||||
sleep_ms(100);
|
||||
cyw43_arch_gpio_put(CYW43_WL_GPIO_LED_PIN, 0);
|
||||
sleep_ms(100);
|
||||
} else {
|
||||
reset_mqtt_config();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user