Code Monkey home page Code Monkey logo

alcantara's People

Contributors

juliocalandrin avatar mairacanal avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar

alcantara's Issues

Data Handling

O objetivo da Alcantara é processar e repassar os pacotes vindo do rádio para interfaces como UART e BLE. Então a operação
mais importante é converter pacotes do rádio em strings csv. Mas ela se comporta de diferentes maneiras dependendo do contexto. Ela pode estar em uma de duas redes (OBSAT ou Zenith). Dependendo de qual das duas, ela irá processar tipos de pacotes diferentes.

  • Caso rede OBSAT:
    • Pacote: OBSAT - Contém dados dos competidores
  • Caso rede Zenith:
    • Pacote: Zenith_Full - Contém o máximo de dados da sonda
    • Pacote: Zenith_Reduced - Contém os dados mínimos da sonda

A entrada do sistema será um array de bytes vindo do rádio. dentro desse array o primeiro byte indica o tipo de pacote. Os pacotes podem ser:

  1. OBSAT:
  2. Zenith_Reduced:
  3. Zenith_Full:

Então será necessário uso de unions para converter os dados entre um conjunto de bytes e uma struct. Com os dados extraídos, é
bom que sejam feitos checks simples para evitar propagar dados obviamente incorretos. Finalmente as informações da struct devem ser convertidos na string adequada.

  • Lembre de organizar o código de forma clara.
  • Lembre commitar com mensagens claras referenciando este issue
  • Caso tenha dúvidas pode mandar neste issue

Pode supor as structs como:

typedef struct {
	uint8_t day, month, year;
	uint8_t second, minute, hour;
	float latitude, longitude, altitude;
	float speed_x, speed_y, speed_z;
} gps_event_t;

typedef struct {
	float latitude, longitude, altitude;
	float preassure_primary;
	float temp_1, temp_2, temp_3;
	float v_1, v_2, v_3;
	float i_1, i_2, i_3;
	float batt_charge;
	uint8_t seconds, minutes, hours;
	uint8_t packet_id;
} radio_full_packet_values_t;

typedef struct {
	float latitude, longitude, altitude;
	float preassure_primary;
	float batt_charge;
	uint8_t seconds, minutes, hours;
	uint8_t packet_id;
} radio_reduced_packet_values_t;

typedef uint8_t obc_blob_t[92];

typedef struct {
	uint8_t id;
	obc_blob_t data;
} radio_obsat_packet_values_t;

Storing Configuration

A Alcântara possuirá vários modos de operação, devido a diferença no tipo de protocolo de comunicação utilizado para envio de cada pacote (LoRa ou FSK) e nas funções que irão parsear os dados.

Para que, acidentalmente, não aconteça alguma desconfiguração do dispositivo, será necessário implementar uma forma de armazenar as configurações atuais para que, após um reset acidental ou devido a falhas, as últimas configurações continuem em vigor.

Para isso será necessário utilizar a biblioteca preferences.h para armazenar as configurações na memória Flash da ESP32, permitindo ao usuário manter as configurações antigas ou substituí-las ao ligar, e, em caso de não haver resposta durante um período de tempo, assumir que o usuário não está configurando o dispositivo e então retomar os valores já armazenados para as configurações.

RTOS

Como a Alcântara estará lidando com várias tarefas acontecendo simultaneamente, como receber dados do rádio, processar esses dados recebidos, enviar os dados via UART, salvar os dados no cartão SD, piscar o LED indicando o modo de operação atual, entre outras, um RTOS é uma implementação interessante para gerenciar tais tarefas e quais delas devem acontecer dada sua prioridade para o funcionamento do dispositivo.

Sendo assim, utilizando a biblioteca FreeRTOS.h, serão implementadas três tasks principais:

  • Uma task para piscar o LED, indicando para o usuário qual é o modo atual de operação, com prioridade baixa;
  • Uma task para receber os dados do rádio e colocá-los numa fila;
  • Uma task para retirar os dados da fila e parseá-los, convertendo os bytes recebidos no rádio em cada um de seus componentes e tipos, e enviando-os via UART e gravando-os no cartão SD.

Bring-Up com Arduino IDE

Criar uma branch com uma estrutura de pastas para o desenvolvimento do projeto da Arduino IDE

git checkout -b firmware

Folder structure:

Alcantara/
    | - ...
    | - firmware/
        | - alcantara/
            | - acantara.ino

A ideia é construir aos poucos o firmware. O primeiro é o hello world, que envolve:

  • Instalar a Arduino IDE
  • Adicionar o ESP32 como Board
  • Criar o projeto na pasta correta
  • "Hello World" via Serial
  • Compilar
  • Executar em uma das ESP32 da salinha

Em teoria é tudo bem rapidinho :)
Terminando essa parte, tem outro issue com a tarefa mais relacionada a funcionalidade da Alcantara.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.