Estação Meteorológica Arduino
Decidi escrever um artigo detalhado dizendo todos os aspectos da criação de uma estação meteorológica do Arduino, pois é difícil cobrir todo o processo de uma só vez. Minha versão da estação meteorológica é conveniente, pois seus dados são armazenados em um computador.
O que é necessário- rede local construída usando um roteador Wifi
- um computador
Arduino UNO (usei a réplica chinesa.)
- Cabo USB para conectar ao Arduino.
barômetro BME280 5V I2C (temperatura, umidade, sensor de pressão)
- estação de solda com secador de cabelo
- solda 0,7 mm
- fluxo.
Módulo Wi-Fi ESP8266 versão ESP-01
- 4 cabos mãe ao pai para a placa de ensaio.
- 4 cabos macho para fêmea para placa de ensaio
- 4 cabos com 50 cm de comprimento para a tábua de pão.
- 8 tubos finos termoencolhíveis de 10 cm de comprimento cada.
- 1 tubo grande termo-termoencolhível, de modo que inclua “4 cabos com 50 cm de comprimento para uma tábua de pão” junto com outros tubos termo-encolhíveis
Configuração de rede
Cada computador na rede deve ver o dispositivo no qual o servidor está localizado.É recomendável instalar os mesmos grupos de trabalho em todos os computadores da rede.

Clique para ampliar
Você deve desativar o bradmauser e outros firewalls.
Nas configurações de rede, nas propriedades do adaptador sem fio, na guia acesso, coloque no início a caixa de seleção “permitir que outros usuários acessem” e, em seguida, clique nas configurações;
Ao colocar todas as marcas de seleção nas configurações, você verá os nomes dos serviços em vez dos números.

Clique para ampliar

Clique para ampliar
Você deve abrir as portas 80 e 3306 no roteador. Vou mostrar pelo exemplo do roteador Tenda: primeiro, descubra o seu endereço IP local e , para isso, clique no ícone de rede sem fio. Em seguida, no painel aberto, ao lado do nome da sua rede, as Propriedades serão exibidas. Depois, role para baixo.

Clique para ampliar
Em seguida, abra a página da web do roteador, eu tenho a http://192.168.0.1 , digite a senha do roteador, clique em Configurações avançadas, depois Virtal Server. Em seguida, digite o IP local primeiro e a porta 80. Em seguida, repita a operação, mas digite a porta 3306 .

Clique para ampliar

Clique para ampliar
Precisamos dos seguintes componentes:
- Apache - os dados da estação meteorológica serão enviados aqui.
- PHP - coleta dados da estação meteorológica e salva o banco de dados.
- Mysql - bancos de dados onde a temperatura será armazenada, já que usar apenas PHP significa que é impossível fornecer exibição para vários computadores e outros dispositivos.
- O HeidiSQL é um visualizador e editor de banco de dados (você pode usar qualquer outro, por exemplo: “PhpMyAdmin”).
Não descreverei em detalhes as configurações do servidor Apache , porque existem muitas informações na Internet. O principal é configurar o Apache e o MySQL para ficarem visíveis na rede local.
Depois disso, crie uma tabela no banco de dados - a temperatura será salva lá.
Um exemplo da minha página do manipulador (leituras do sensor) no servidor:
Código PHP$link = mysqli_connect(" ", "root", " ", " "); if (!$link) { echo ": MySQL." . PHP_EOL; echo " errno: " . mysqli_connect_errno() . PHP_EOL; echo " error: " . mysqli_connect_error() . PHP_EOL; exit; } echo " MySQL !" . PHP_EOL; echo " : " . mysqli_get_host_info($link) . PHP_EOL; if(isset($_GET['temp'])){ $c=$_GET['temp']; $vlah=$_GET['vlah']; $davlen=$_GET['davlen']; $sql = "UPDATE `temp1` SET `C`='$c',`vlah`='$vlah',`davlen`='$davlen' WHERE `id`='1'";
3. Configurando esp8266
Conecte o esp-01 ao adaptador e ao Arduino da seguinte maneira: Rx-RX, TX-TX, GND-GND, VCC-5V ;
Aterre a porta RESET Arduino para GND ;

Clique para ampliar
Conecte o seu arduino ao seu computador, abra o IDE do Arduino , depois o Serial Monitor , especifique a taxa 115200 e
Ambos NL e CR .

Clique para ampliar
- Digite o comando AT .
- Destaque OK .
- Digite AT + RESTORE , ele solicitará ao módulo as configurações de fábrica.
- Digite AT + CWMODE_CUR = 1 , isso colocará o módulo no modo cliente.
- Digite AT + CWJAP_CUR = "Network_name", "Password" - conexão com o wifi.
- Destaque OK se uma conexão ocorreu.
Configurar o bme280 e a compilação final
Conecte as conclusões de acordo com o diagrama (atenção ao diagrama mostra esp8266 sem um adaptador, mas, na realidade, ele precisa estar conectado ao adaptador e já a partir de
4 adaptadores de saída têm a mesma função mostrada no diagrama. )

Clique para ampliar
Abra o IDE do Arduino e cole o seguinte código:
Código IDE do Arduino #include <Wire.h> void setup(){ Wire.begin(); Serial.begin(9600); while (!Serial); Serial.println("\nI2C Scanner"); } void loop(){ byte error, address; int nDevices; Serial.println("Scanning..."); nDevices = 0; for(address = 8; address < 127; address++ ){ Wire.beginTransmission(address); error = Wire.endTransmission(); if (error == 0){ Serial.print("I2C device found at address 0x"); if (address<16) Serial.print("0"); Serial.print(address,HEX); Serial.println(" !"); nDevices++; } else if (error==4) { Serial.print("Unknow error at address 0x"); if (address<16) Serial.print("0"); Serial.println(address,HEX); } } if (nDevices == 0) Serial.println("No I2C devices found\n"); else Serial.println("done\n"); delay(5000);
Abra o Serial Monitor e lembre-se do endereço IC2 destacado.
Faça o download das bibliotecas do Sensor Library , Touch Library e descompacte-os em C: \ Users \ user \ Documents \ Arduino . Aberto
C: \ Usuários \ usuário \ Documentos \ Arduino \ libraries \ Adafruit_BME280_Library-master e altere o endereço:

Clique para ampliar
Abra o IDE do Arduino e coloque o código:
Código IDE do Arduino #include <SoftwareSerial.h> #define RX 10// esp8266 #define TX 11// esp8266 String AP = "Aleks"; // String PASS = "1brui47ci881"; // String HOST = "192.168.0.185";// String PORT = "80";// String field = "field1"; int countTrueCommand; int countTimeCommand; boolean found = false; int valSensor = 1; SoftwareSerial esp8266(RX,TX); #include <Wire.h> #include <SPI.h> #include <Adafruit_Sensor.h> #include <Adafruit_BME280.h> #define BME_SCK 13 #define BME_MISO 12 #define BME_MOSI 11 #define BME_CS 10 #define SEALEVELPRESSURE_HPA (1013.25) Adafruit_BME280 bme; // I2C //Adafruit_BME280 bme(BME_CS); // hardware SPI //Adafruit_BME280 bme(BME_CS, BME_MOSI, BME_MISO, BME_SCK); // software SPI unsigned long delayTime; void setup() { Serial.begin(9600); bool status; // default settings // (you can also pass in a Wire library object like &Wire2) status = bme.begin(); if (!status) { Serial.println("Could not find a valid BME280 sensor, check wiring!"); while (1); } esp8266.begin(115200); sendCommand("AT",5,"OK"); sendCommand("AT+CWMODE=1",5,"OK"); sendCommand("AT+CWJAP=\""+ AP +"\",\""+ PASS +"\"",20,"OK"); sendCommand("AT+CIPMUX=1",5,"OK"); } void loop() { float vlah=bme.readPressure() / 100.0F; sendCommand("AT+CIPSTART=0,\"TCP\",\""+ HOST +"\","+ PORT,15,"OK"); String cmd = "GET /?temp="+String(bme.readTemperature())+"&vlah="+String(vlah)+"&davlen="+String(bme.readHumidity())+" HTTP/1.1\r\nHost: 192.168.0.185\r\n\r\n";// GET ,temp,vlah,davlen . sendCommand("AT+CIPSEND=0," +String(cmd.length()+4),4,">"); esp8266.println(cmd);delay(1500);countTrueCommand++; sendCommand("AT+CIPCLOSE=0",5,"OK"); delay(100000); } void printValues() { Serial.print("Temperature = "); Serial.print(bme.readTemperature()); Serial.println(" *C"); Serial.print("Pressure = "); Serial.print(bme.readPressure() / 100.0F); Serial.println(" hPa"); Serial.print("Humidity = "); Serial.print(bme.readHumidity()); Serial.println(" %"); Serial.println(); } void sendCommand(String command, int maxTime, char readReplay[]) { Serial.print(countTrueCommand); Serial.print(". at command => "); Serial.print(command); Serial.print(" "); while(countTimeCommand < (maxTime*1)) { esp8266.println(command);//at+cipsend if(esp8266.find(readReplay))//ok { found = true; break; } countTimeCommand++; } if(found == true) { Serial.println("OYI"); countTrueCommand++; countTimeCommand = 0; } if(found == false) { Serial.println("Fail"); countTrueCommand = 0; countTimeCommand = 0; } found = false; }
Feito. Os dados de temperatura serão transferidos como variáveis para o banco de dados.
Como você pode ver, minha estação meteorológica requer um conhecimento inicial de programação na Web, mas o resultado vale a pena.