Monitor meteorológico MKR FOX 1200
Componentes e suprimentos
![]() |
| × | 1 | |||
![]() |
| × | 1 | |||
| × | 1 | ||||
| × | 1 |
Aplicativos e serviços online
![]() |
| |||
![]() |
| |||
![]() |
|
Sobre este projeto
Observação:este tutorial pode estar desatualizado, vá aqui para uma versão mais atual.
Este projeto mostra como girar um MKR FOX 1200 e um monte de sensores I2C em uma estação meteorológica simples, movida a bateria.
Nós vamos usar:
- o sensor de temperatura integrado (baixa precisão, ± 1 ° C)
- Sensor HTU21D I2C para obter o nível de umidade
- Bosch BMP280 para obter a pressão barométrica e a temperatura precisa
- Sensor de luz TSL2561 para obter luminosidade
Configuração de hardware
As conexões de hardware para este projeto são bastante simples:todos os sensores usam interfaces I2C e funcionam a 3,3V.
Eles precisam de quatro fios do MKR FOX 1200:GND, 3,3V, SDA no pino 11 e SCL no pino 12. As mesmas quatro conexões podem ser compartilhadas em paralelo com os três sensores porque cada um deles tem um endereço I2C específico e, portanto, o bibliotecas e funções relevantes cuidarão de discriminar cada um deles.
Todo o projeto pode ser alimentado por duas baterias alcalinas AA ou AAA conectadas em série para gerar 3V e conectadas ao bloco de terminais de conexão a parafuso na placa.
Mensagens Sigfox
Como a rede Sigfox pode enviar no máximo 140 mensagens por dia, otimizaremos as leituras e enviaremos os dados em formato binário compacto.
A compactação de dados é importante porque o tamanho máximo de uma mensagem que você pode enviar é de 12 bytes. Um float ocupa 4 bytes, portanto, precisaremos compactar nossas leituras em uma representação menor.
O formato flutuante é muito amplo (você pode representar números tão grandes quanto 3,402823e + 38 (!)) E não precisamos de todo o espaço de dados; podemos então decidir os limites de segurança (com base em onde vamos implantar a estação) e restaurar a representação original no backend.
Configuração dos serviços em nuvem
Usaremos dois serviços em nuvem:
- back-end Sigfox
- Thingspeak
Registre sua placa no backend Sigfox usando PAC e ID fornecidos pelo exemplo FirstConfiguration (pode ser ignorado se você já fez isso para um projeto anterior).
Ambos precisam ser configurados para se comunicarem e interpretarem os dados no formato correto. Registre-se em ambos e crie alguns canais em Thingspeak. A configuração é relatada na imagem abaixo.
O primeiro canal que configuraremos será aquele que receberá os dados brutos (
readChannelID
), enquanto o segundo coletará os dados redimensionados ( writeChannelID
) 
É hora de fazer o upload do esboço usando o Arduino Create Editor. O esboço padrão permite que você teste extensivamente toda a infraestrutura antes de implantar no campo.
Lembre-se de declarar:
oneshot =false
quando você tiver certeza de que toda a configuração da infraestrutura de back-end está correta. O esboço aguarda a porta serial, portanto, não o lançaremos agora. Em vez disso, abra o back-end SigFox e configure um retorno de chamada:
Clique em TIPO DE DISPOSITIVO -> LISTA -> clique com o botão direito em seu quadro e clique em Editar.

Clique em CALLBACKS no menu do lado esquerdo:

Você verá uma janela como esta:
Clique em Novo botão no canto superior direito da janela:

Selecione Retorno de chamada personalizado:


As configurações relevantes são relatadas abaixo. Certifique-se de que o retorno de chamada esteja configurado como:
- TIPO:
DADOS / UPLINK
- Canal:
URL
- Método Http:
GET
Como carga útil personalizada, defina:
status ::uint:8 temp1 ::int:16:little-endian temp2 ::int:16:little-endian press ::uint:16:little-endian hum ::uint:16:little -endian light ::uint:16:little-endian lastMsg ::uint:8
Isso representa a estrutura que empacotamos no esboço. Estamos atribuindo uma variável a cada campo, para que possamos referenciá-los no retorno de chamada HTTP.
Como padrão de URL, defina:
https://api.thingspeak.com/update?api_key=XXXXXXXXXXXX&field1={customData#temp1}&field2={customData#press}&field3={customData#temp2}&field4={customData#hum}&field5={customData # light} &field6 ={customData # status} &field7 ={customData # lastMsg}
Depois de configuradas, suas janelas devem ser assim:

Lembre-se de alterar a chave API
api_key
com aquele fornecido por Thingspeak como Write API Key
para Channel1
. 
Salvar e sair. Agora podemos abrir a porta serial e observar a primeira mensagem sendo enviada. Viva!
Do cru para o gráfico
A configuração que configuramos irá rotear nossos dados para o backend Thingspeak, mas eles ainda estão no formato bruto; para reconvertê-los, vamos usar a ferramenta de análise Thingspeak com este trecho
% TODO - Substitua o [] pelo ID do canal para ler os dados de:readChannelID =[]; % TODO - Insira a chave API de leitura entre '' abaixo:readAPIKey ='T6UK7XO6A4H2AGT7'; % TODO - Substitua o [] pelo ID do canal para gravar dados em:writeChannelID =[]; % TODO - Insira a Chave de API de gravação entre '' abaixo:writeAPIKey ='XU4TGY261P6B5USN'; %% Read Data %% data =thingSpeakRead (readChannelID, 'ReadKey', readAPIKey, 'OutputFormat', 'tabela'); AnalyisedData =data; %% Analyze Data %% INT16_t_MAX =32767; UINT16_t_MAX =65536; analisadoDados. ('Temperatura1') =dados. ('Temperatura1') / INT16_t_MAX * 120; analisadoDados. ('Temperatura2') =dados. ('Temperatura2') / INT16_t_MAX * 120; analisadoDados. ('Pressão') =dados. ('Pressão') / UINT16_t_MAX * 200000; AnalyisedData. ('Light') =data. ('Light') / UINT16_t_MAX * 100000; analisadoDados. ('Umidade') =dados. ('Umidade') / UINT16_t_MAX * 110; %% Write Data %% thingSpeakWrite (writeChannelID, AnalyseData, 'WriteKey', writeAPIKey); %% Agendar ação:React -> a cada 10 minutos
Substituindo os IDs de canal com o nosso, podemos finalmente converter de volta os dados brutos em valores reais. Lembre-se de agendar a ação de análise a cada 10 minutos usando React ou nunca será executado!



Finalmente temos nossos gráficos maravilhosos.


Código
WeatherMonitor
Processo de manufatura
- Estação meteorológica Raspberry Pi
- Monitor de clima
- Faça Monitor Ambilight usando Arduino
- Monitoramento de CO2 com Sensor K30
- Monitor de freqüência cardíaca usando IoT
- Arduino + ESP Weather Box
- Qual é sua altura?
- Sensor capacitivo de impressão digital com um Arduino ou ESP8266
- Arduino Cloud Sensor Tower
- Monitor de qualidade do ar faça você mesmo com sensor Sharp GP2Y1010AU0F