wifi antenna switch implented (LoPy/LoPy4 only)
This commit is contained in:
parent
62325e9d40
commit
d6164f3132
@ -147,6 +147,11 @@ Note: all settings are stored in NVRAM and will be reloaded when device starts.
|
|||||||
0 = disabled [default]
|
0 = disabled [default]
|
||||||
1 = enabled
|
1 = enabled
|
||||||
|
|
||||||
|
0x0E set WIFI antenna switch (works on LoPy/LoPy4 only)
|
||||||
|
|
||||||
|
0 = internal antenna [default]
|
||||||
|
1 = external antenna
|
||||||
|
|
||||||
0x80 get device configuration
|
0x80 get device configuration
|
||||||
|
|
||||||
device answers with it's current configuration:
|
device answers with it's current configuration:
|
||||||
@ -162,7 +167,8 @@ Note: all settings are stored in NVRAM and will be reloaded when device starts.
|
|||||||
byte 10: Wifi channel switch interval in seconds/100 (0..255)
|
byte 10: Wifi channel switch interval in seconds/100 (0..255)
|
||||||
byte 11: BLE scan cycle duration in seconds (0..255)
|
byte 11: BLE scan cycle duration in seconds (0..255)
|
||||||
byte 12: BLE scan mode (1=on, 0=0ff)
|
byte 12: BLE scan mode (1=on, 0=0ff)
|
||||||
bytes 13-22: Software version (ASCII format)
|
byte 13: Wifi antenna switch (0=internal, 1=external)
|
||||||
|
bytes 14-23: Software version (ASCII format)
|
||||||
|
|
||||||
0x81 get device uptime
|
0x81 get device uptime
|
||||||
|
|
||||||
|
@ -10,10 +10,10 @@
|
|||||||
|
|
||||||
; ---> SELECT TARGET PLATFORM HERE! <---
|
; ---> SELECT TARGET PLATFORM HERE! <---
|
||||||
[platformio]
|
[platformio]
|
||||||
;env_default = heltec_wifi_lora_32
|
env_default = heltec_wifi_lora_32
|
||||||
;env_default = ttgov1
|
;env_default = ttgov1
|
||||||
;env_default = ttgov2
|
;env_default = ttgov2
|
||||||
env_default = lopy
|
;env_default = lopy
|
||||||
;env_default = lopy4
|
;env_default = lopy4
|
||||||
|
|
||||||
[env:heltec_wifi_lora_32]
|
[env:heltec_wifi_lora_32]
|
||||||
|
@ -1,4 +1,6 @@
|
|||||||
#ifdef LOPY
|
/* switches wifi antenna, if board has switch to select internal and external antenna */
|
||||||
|
|
||||||
|
#ifdef HAS_ANTENNA_SWITCH
|
||||||
|
|
||||||
#include <Arduino.h>
|
#include <Arduino.h>
|
||||||
|
|
||||||
@ -11,7 +13,7 @@ typedef enum {
|
|||||||
} antenna_type_t;
|
} antenna_type_t;
|
||||||
|
|
||||||
void antenna_init(void) {
|
void antenna_init(void) {
|
||||||
gpio_config_t gpioconf = {.pin_bit_mask = 1ull << PIN_ANTENNA_SWITCH,
|
gpio_config_t gpioconf = {.pin_bit_mask = 1ull << HAS_ANTENNA_SWITCH,
|
||||||
.mode = GPIO_MODE_OUTPUT,
|
.mode = GPIO_MODE_OUTPUT,
|
||||||
.pull_up_en = GPIO_PULLUP_DISABLE,
|
.pull_up_en = GPIO_PULLUP_DISABLE,
|
||||||
.pull_down_en = GPIO_PULLDOWN_DISABLE,
|
.pull_down_en = GPIO_PULLDOWN_DISABLE,
|
||||||
@ -19,21 +21,21 @@ void antenna_init(void) {
|
|||||||
gpio_config(&gpioconf);
|
gpio_config(&gpioconf);
|
||||||
}
|
}
|
||||||
|
|
||||||
void antenna_select (antenna_type_t _ant) {
|
void antenna_select (const int8_t _ant) {
|
||||||
if (PIN_ANTENNA_SWITCH < 32) {
|
if (HAS_ANTENNA_SWITCH < 32) {
|
||||||
if (_ant == ANTENNA_EXT) {
|
if (_ant == ANTENNA_EXT) {
|
||||||
GPIO_REG_WRITE(GPIO_OUT_W1TS_REG, 1 << PIN_ANTENNA_SWITCH);
|
GPIO_REG_WRITE(GPIO_OUT_W1TS_REG, 1 << HAS_ANTENNA_SWITCH);
|
||||||
} else {
|
} else {
|
||||||
GPIO_REG_WRITE(GPIO_OUT_W1TC_REG, 1 << PIN_ANTENNA_SWITCH);
|
GPIO_REG_WRITE(GPIO_OUT_W1TC_REG, 1 << HAS_ANTENNA_SWITCH);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (_ant == ANTENNA_EXT) {
|
if (_ant == ANTENNA_EXT) {
|
||||||
GPIO_REG_WRITE(GPIO_OUT1_W1TS_REG, 1 << (PIN_ANTENNA_SWITCH & 31));
|
GPIO_REG_WRITE(GPIO_OUT1_W1TS_REG, 1 << (HAS_ANTENNA_SWITCH & 31));
|
||||||
} else {
|
} else {
|
||||||
GPIO_REG_WRITE(GPIO_OUT1_W1TC_REG, 1 << (PIN_ANTENNA_SWITCH & 31));
|
GPIO_REG_WRITE(GPIO_OUT1_W1TC_REG, 1 << (HAS_ANTENNA_SWITCH & 31));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
ESP_LOGI(TAG, "Wifi Antenna switched to %s", _ant ? "external" : "internal");
|
ESP_LOGI(TAG, "Wifi Antenna switched to %s", _ant ? "external" : "internal");
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif //
|
#endif
|
@ -12,6 +12,11 @@ nvs_handle my_handle;
|
|||||||
|
|
||||||
esp_err_t err;
|
esp_err_t err;
|
||||||
|
|
||||||
|
// defined in antenna.cpp
|
||||||
|
#ifdef HAS_ANTENNA_SWITCH
|
||||||
|
void antenna_select(const int8_t _ant);
|
||||||
|
#endif
|
||||||
|
|
||||||
// populate cfg vars with factory settings
|
// populate cfg vars with factory settings
|
||||||
void defaultConfig() {
|
void defaultConfig() {
|
||||||
cfg.lorasf = LORASFDEFAULT; // 7-12, initial lora spreadfactor defined in main.h
|
cfg.lorasf = LORASFDEFAULT; // 7-12, initial lora spreadfactor defined in main.h
|
||||||
@ -25,6 +30,7 @@ void defaultConfig() {
|
|||||||
cfg.wifichancycle = WIFI_CHANNEL_SWITCH_INTERVAL; // wifi channel switch cycle [seconds/100]
|
cfg.wifichancycle = WIFI_CHANNEL_SWITCH_INTERVAL; // wifi channel switch cycle [seconds/100]
|
||||||
cfg.blescancycle = BLESCANTIME; // BLE scan cycle [seconds]
|
cfg.blescancycle = BLESCANTIME; // BLE scan cycle [seconds]
|
||||||
cfg.blescan = 0; // 0=disabled, 1=enabled
|
cfg.blescan = 0; // 0=disabled, 1=enabled
|
||||||
|
cfg.wifiant = 0; // 0=internal, 1=external (for LoPy/LoPy4)
|
||||||
strncpy( cfg.version, PROGVERSION, sizeof(cfg.version)-1 );
|
strncpy( cfg.version, PROGVERSION, sizeof(cfg.version)-1 );
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -101,7 +107,10 @@ void saveConfig() {
|
|||||||
nvs_set_i8(my_handle, "blescancycle", cfg.blescancycle);
|
nvs_set_i8(my_handle, "blescancycle", cfg.blescancycle);
|
||||||
|
|
||||||
if( nvs_get_i8(my_handle, "blescanmode", &flash8) != ESP_OK || flash8 != cfg.blescan )
|
if( nvs_get_i8(my_handle, "blescanmode", &flash8) != ESP_OK || flash8 != cfg.blescan )
|
||||||
nvs_set_i8(my_handle, "blescanmode", cfg.blescan);
|
nvs_set_i8(my_handle, "blescanmode", cfg.blescan);
|
||||||
|
|
||||||
|
if( nvs_get_i8(my_handle, "wifiant", &flash8) != ESP_OK || flash8 != cfg.wifiant )
|
||||||
|
nvs_set_i8(my_handle, "wifiant", cfg.wifiant);
|
||||||
|
|
||||||
if( nvs_get_i16(my_handle, "rssilimit", &flash16) != ESP_OK || flash16 != cfg.rssilimit )
|
if( nvs_get_i16(my_handle, "rssilimit", &flash16) != ESP_OK || flash16 != cfg.rssilimit )
|
||||||
nvs_set_i16(my_handle, "rssilimit", cfg.rssilimit);
|
nvs_set_i16(my_handle, "rssilimit", cfg.rssilimit);
|
||||||
@ -218,6 +227,14 @@ void loadConfig() {
|
|||||||
ESP_LOGI(TAG, "WIFI channel cycle set to default %i", cfg.wifichancycle);
|
ESP_LOGI(TAG, "WIFI channel cycle set to default %i", cfg.wifichancycle);
|
||||||
saveConfig();
|
saveConfig();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if( nvs_get_i8(my_handle, "wifiant", &flash8) == ESP_OK ) {
|
||||||
|
cfg.wifiant = flash8;
|
||||||
|
ESP_LOGI(TAG, "wifiantenna = %i", flash8);
|
||||||
|
} else {
|
||||||
|
ESP_LOGI(TAG, "WIFI antenna switch set to default %i", cfg.wifiant);
|
||||||
|
saveConfig();
|
||||||
|
}
|
||||||
|
|
||||||
if( nvs_get_i8(my_handle, "blescancycle", &flash8) == ESP_OK ) {
|
if( nvs_get_i8(my_handle, "blescancycle", &flash8) == ESP_OK ) {
|
||||||
cfg.blescancycle = flash8;
|
cfg.blescancycle = flash8;
|
||||||
@ -245,5 +262,10 @@ void loadConfig() {
|
|||||||
|
|
||||||
nvs_close(my_handle);
|
nvs_close(my_handle);
|
||||||
ESP_LOGI(TAG, "Done");
|
ESP_LOGI(TAG, "Done");
|
||||||
|
|
||||||
|
// put actions to be triggered on loaded config here
|
||||||
|
#ifdef HAS_ANTENNA_SWITCH
|
||||||
|
antenna_select(cfg.wifiant);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -25,6 +25,7 @@ typedef struct {
|
|||||||
int8_t wifichancycle; // wifi channel switch cycle [seconds/100]
|
int8_t wifichancycle; // wifi channel switch cycle [seconds/100]
|
||||||
int8_t blescancycle; // BLE scan cycle [seconds]
|
int8_t blescancycle; // BLE scan cycle [seconds]
|
||||||
int8_t blescan; // 0=disabled, 1=enabled
|
int8_t blescan; // 0=disabled, 1=enabled
|
||||||
|
int8_t wifiant; // 0=internal, 1=external (for LoPy/LoPy4)
|
||||||
char version[10]; // Firmware version
|
char version[10]; // Firmware version
|
||||||
} configData_t;
|
} configData_t;
|
||||||
|
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
// Hardware related definitions for Pycom LoPy Board (not: LoPy4)
|
// Hardware related definitions for Pycom LoPy Board (not: LoPy4)
|
||||||
|
|
||||||
#define LOPY
|
|
||||||
#define CFG_sx1272_radio 1
|
#define CFG_sx1272_radio 1
|
||||||
|
|
||||||
// Hardware pin definitions for Pycom LoPy board
|
// Hardware pin definitions for Pycom LoPy board
|
||||||
@ -14,5 +13,5 @@
|
|||||||
#define DIO2 23 // workaround
|
#define DIO2 23 // workaround
|
||||||
|
|
||||||
// select WIFI antenna (internal = onboard / external = u.fl socket)
|
// select WIFI antenna (internal = onboard / external = u.fl socket)
|
||||||
#define PIN_ANTENNA_SWITCH 16
|
#define HAS_ANTENNA_SWITCH 16 // pin for switching wifi antenna
|
||||||
#define WIFI_ANTENNA ANTENNA_INT // can be switced to ANTENNA_EXT
|
#define WIFI_ANTENNA 0 // 0 = internal, 1 = external
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
// Hardware related definitions for Pycom LoPy Board (not: LoPy4)
|
// Hardware related definitions for Pycom LoPy Board (not: LoPy4)
|
||||||
|
|
||||||
#define LOPY
|
|
||||||
#define CFG_sx1276_radio 1
|
#define CFG_sx1276_radio 1
|
||||||
|
|
||||||
// Hardware pin definitions for Pycom LoPy4 board
|
// Hardware pin definitions for Pycom LoPy4 board
|
||||||
@ -14,5 +13,5 @@
|
|||||||
#define DIO2 23 // workaround
|
#define DIO2 23 // workaround
|
||||||
|
|
||||||
// select WIFI antenna (internal = onboard / external = u.fl socket)
|
// select WIFI antenna (internal = onboard / external = u.fl socket)
|
||||||
#define PIN_ANTENNA_SWITCH 21
|
#define HAS_ANTENNA_SWITCH 21 // pin for switching wifi antenna
|
||||||
#define WIFI_ANTENNA ANTENNA_INT // can be switced to ANTENNA_EXT
|
#define WIFI_ANTENNA 0 // 0 = internal, 1 = external
|
@ -149,10 +149,10 @@ void lorawan_loop(void * pvParameters) {
|
|||||||
U8X8_NULL u8x8;
|
U8X8_NULL u8x8;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef LOPY
|
#ifdef HAS_ANTENNA_SWITCH
|
||||||
// defined in antenna.cpp
|
// defined in antenna.cpp
|
||||||
void antenna_init (void);
|
void antenna_init();
|
||||||
void antenna_select (antenna_type_t antenna_type);
|
void antenna_select(const int8_t _ant);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined BLECOUNTER
|
#if defined BLECOUNTER
|
||||||
@ -368,9 +368,8 @@ void setup() {
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
// initialize wifi antenna
|
// initialize wifi antenna
|
||||||
#ifdef LOPY
|
#ifdef HAS_ANTENNA_SWITCH
|
||||||
antenna_init();
|
antenna_init();
|
||||||
antenna_select(WIFI_ANTENNA);
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// initialize display
|
// initialize display
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
// program version
|
// program version
|
||||||
#define PROGVERSION "1.2.33" // use max 10 chars here!
|
#define PROGVERSION "1.2.4" // use max 10 chars here!
|
||||||
#define PROGNAME "PAXCNT"
|
#define PROGNAME "PAXCNT"
|
||||||
|
|
||||||
// Verbose enables serial output
|
// Verbose enables serial output
|
||||||
|
@ -17,6 +17,11 @@ static const char *TAG = "rcommand";
|
|||||||
void eraseConfig(void);
|
void eraseConfig(void);
|
||||||
void saveConfig(void);
|
void saveConfig(void);
|
||||||
|
|
||||||
|
// defined in antenna.cpp
|
||||||
|
#ifdef HAS_ANTENNA_SWITCH
|
||||||
|
void antenna_select(const int8_t _ant);
|
||||||
|
#endif
|
||||||
|
|
||||||
// table of remote commands and assigned functions
|
// table of remote commands and assigned functions
|
||||||
typedef struct {
|
typedef struct {
|
||||||
const int nam;
|
const int nam;
|
||||||
@ -153,6 +158,17 @@ void set_blescan(int val) {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
void set_wifiant(int val) {
|
||||||
|
ESP_LOGI(TAG, "Remote command: set Wifi antenna to %s", val ? "external" : "internal");
|
||||||
|
switch (val) {
|
||||||
|
case 1: cfg.wifiant = val; break;
|
||||||
|
default: cfg.wifiant = 0; break;
|
||||||
|
}
|
||||||
|
#ifdef HAS_ANTENNA_SWITCH
|
||||||
|
antenna_select(cfg.wifiant);
|
||||||
|
#endif
|
||||||
|
};
|
||||||
|
|
||||||
void set_lorapower(int val) {
|
void set_lorapower(int val) {
|
||||||
ESP_LOGI(TAG, "Remote command: set LoRa TXPOWER to %i", val);
|
ESP_LOGI(TAG, "Remote command: set LoRa TXPOWER to %i", val);
|
||||||
switch_lora(cfg.lorasf, val);
|
switch_lora(cfg.lorasf, val);
|
||||||
@ -212,6 +228,7 @@ cmd_t table[] = {
|
|||||||
{0x0b, set_wifichancycle, true},
|
{0x0b, set_wifichancycle, true},
|
||||||
{0x0c, set_blescancycle, true},
|
{0x0c, set_blescancycle, true},
|
||||||
{0x0d, set_blescan, true},
|
{0x0d, set_blescan, true},
|
||||||
|
{0x0e, set_wifiant, true},
|
||||||
{0x80, get_config, false},
|
{0x80, get_config, false},
|
||||||
{0x81, get_uptime, false},
|
{0x81, get_uptime, false},
|
||||||
{0x82, get_cputemp, false}
|
{0x82, get_cputemp, false}
|
||||||
|
Loading…
Reference in New Issue
Block a user