Dobrý den, snažím se zprovoznit jednoduché odesílání teploty a hodnoty osvětlení (mám lux tag) z core modulu přes sigfox. Pomocí příkladu, který byl na stránkách BigClown a používal Sigfox (už tam není), jsem si upravil kód na následující:
#include <application.h>
#define SIGFOX_COOLDOWN_SECONDS (15 * 60)
typedef enum
{
SIGFOX_HEADER_RESET = 0,
SIGFOX_HEADER_MOTION = 1,
} sigfox_header_t;
bc_led_t led;
bc_button_t button;
bc_tag_temperature_t temperature_tag;
bc_module_sigfox_t sigfox_module;
float temperature;
bool button_transmission_active = false;
void application_init(void)
{
bc_led_init(&led, BC_GPIO_LED, false, false);
bc_button_init(&button, BC_GPIO_BUTTON, BC_GPIO_PULL_DOWN, false);
bc_button_set_event_handler(&button, button_event_handler, NULL);
bc_tag_temperature_init(&temperature_tag, BC_I2C_I2C0, BC_TAG_TEMPERATURE_I2C_ADDRESS_ALTERNATE);
bc_tag_temperature_set_update_interval(&temperature_tag, 120000);
bc_module_sigfox_init(&sigfox_module, BC_MODULE_SIGFOX_REVISION_R2);
bc_module_sigfox_set_event_handler(&sigfox_module, sigfox_module_event_handler, NULL);
}
// Spustí funkci transmit_button_task při stisku tlačítka
void button_event_handler(bc_button_t *self, bc_button_event_t event, void *event_param)
{
(void) self;
(void) event_param;
if (event == BC_BUTTON_EVENT_PRESS)
{
if (bc_module_sigfox_is_ready(&sigfox_module))
{
bc_tag_temperature_get_temperature_celsius(self, &temperature);
uint8_t buffer[5];
buffer[0] = 0x02;
buffer[1] = (uint32_t) temperature;
buffer[2] = (uint32_t) temperature >> 8;
buffer[3] = (uint32_t) temperature >> 16;
buffer[4] = (uint32_t) temperature >> 24;
bc_module_sigfox_send_rf_frame(&sigfox_module, buffer, sizeof(buffer));
}
}
}
void sigfox_module_event_handler(bc_module_sigfox_t *self, bc_module_sigfox_event_t event, void *event_param)
{
(void) self;
(void) event_param;
if (event == BC_MODULE_SIGFOX_EVENT_ERROR)
{
bc_led_set_mode(&led, BC_LED_MODE_BLINK);
}
if (event == BC_MODULE_SIGFOX_EVENT_SEND_RF_FRAME_START)
{
bc_led_set_mode(&led, BC_LED_MODE_BLINK_FAST);
}
else if (event == BC_MODULE_SIGFOX_EVENT_SEND_RF_FRAME_DONE)
{
bc_led_set_mode(&led, BC_LED_MODE_OFF);
}
}
Nějaká data se mi v thingspeaku zobrazují:
Aktuálně se odeslání spouští stiskem tlačítka, já bych ale potřeboval, aby se data odesílala automaticky každých 12 minut. Jak program upravit?
Rád bych psaní kódu pro bigclown více porozuměl, ale žádný tutoriál, který by se tomu věnoval jsem nenašel, vše to je stylem stáhni si hotový firmware, nahraj a je to. Když chce ale člověk udělat v projektu nějaké úpravy, je to dost složité.