O módulo MINI NodeMcu ESP-12F é uma placa de desenvolvimento que combina o chip ESP8266, uma interface usb-serial e um regulador de tensão 3.3V. É a evolução do NodeMCU V3 e além de utilizar o chip ESP12F, já vem com sensor de luminosidade, Led RGB e um Botão programável, tudo embutido. O módulo é composto por duas placas, conectadas uma em cima da outra. Para programar deve-se usar as duas placas conectadas, depois do upload finalizado, basta desconectar uma da outra e utilizar somente a que possuí o ESP (a outra é responsável pela comunicação serial entre o PC e o controlador). A programação pode ser feita usando LUA ou a IDE do Arduino, utilizando a comunicação via cabo micro-usb.

Para testar a plaquinha, segui o exemplo disponibilizado por outro Blog (http://josecintra.com/blog/esp8266-bancos-dados-requisicoes-http/) e fiz apenas algumas modificações. Utilizei o MiniNodeMCU, um sensor DTH22 (umidade e temperatura) e o sensor LDR embutido no módulo. O teste consiste em obter os valores dos sensores, chamar uma página PHP (através da rede wifi) passando os respectivos valores, o PHP recebe e grava numa tabela de um banco de dados no MySQL.

Cada vez que a gravação dos dados é realizada no Banco, o nodeMCU pisca o LED RGB da placa, sinalizando que ocorreu a gravação.

Será necessário um servidor Apache / PHP / Mysql disponível para rodar o arquivo .PHP que receberá os parâmetros para gravação no banco.

Detalhamento do módulo

Detalhamento do módulo

O nodeMcu possuí alguns itens já embutidos na placa (RGB, Button e LDR), e por esse motivo alguns pinos já estão sendo utilizados conforme marcação na imagem acima. Apenas 3 pinos estão totalmente livres (D5, D14 e D16). No exemplo, acabei utilizando o D4 (que por padrão é utilizado para o Push-Button) sem perceber, porém como funcionou perfeitamente (desde que o botão não seja pressionado) resolvi deixar, pois de certa maneira reaproveitei uma porta.

Esquema de ligação

Esquema de ligação nodemcu mini cloud

Sketch do programa

//ORIGINALMENTE POR
// ESP8266 e Banco de Dados - Requisições HTTP
// 2016 por José Cintra
// www.josecintra.com/blog
// 
//MODIFICAÇÕES POR
//OZIRISJUNIOR 


#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <dht11.h>
#define dht_dpin 4
int sensor = A0;
int LedVermelho = 15;

dht11 DHT11;

const char* ssid = "NOME_DA_REDE_WIFI";
const char* password = "SENHA_REDE_WIFI";

const char http_site[] = "http://IP_DO_SERVIDOR"; //ONDE A PÁGINA PHP ESTARA RODANDO - FORMATO XXX.XXX.XXX.XXX
const int http_port = PORTA_SERVIDOR; //NÚMERO DA PORTA DO SERVIDOR

WiFiClient client;
IPAddress server(IP_DO_SERVIDOR); //ENDEREÇO DO SERVIDOR - FORMATO XXX,XXX,XXX,XXX

void setup() {
  Serial.begin(115200);
  delay(10);
  
  pinMode(LedVermelho, OUTPUT);
  
  Serial.print("Conectando na rede: ");
  Serial.println(ssid);
  WiFi.begin(ssid, password);

  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  Serial.println("WiFi Conectada");
}

void loop() {
  DHT11.read(dht_dpin); //Le sensor
  int temp = DHT11.temperature;
  int humid = DHT11.humidity;
  int lumi = analogRead(sensor);
  
  Serial.println("Gravando dados no BD: ");
  Serial.println(DHT11.temperature);
  Serial.println(DHT11.humidity);
  Serial.println(lumi);  
  
  if ( !client.connect(server, http_port) ) {
    Serial.println("Falha na conexao com o site ");

  } else {

        digitalWrite(LedVermelho, HIGH);
        String param = "?temp=" + String(temp) + "&humid=" + String(humid) + "&lumi=" + String(lumi); //Parâmetros com as leituras
        client.println("GET http://IP_DO_SERVIDOR:PORTA_DO_SERVIDOR/ambiente/webservice.php" + param + " HTTP/1.1"); // EX: http://192.168.1.114:8080/ambiente/webservice.php
        client.println("Host: ");
        client.println(http_site);
        client.println("Connection: close");
        client.println();
        client.println();
        digitalWrite(LedVermelho, LOW);
      
          // INFORMACOES DE RETORNO PARA DEBUG
        while(client.available()){
          String line = client.readStringUntil('\r');
          Serial.print(line);
        }
  }
    delay(2000); //AGUARDO 2 SEGUNDOS PARA PROCESSAR A CAPTURA NOVAMENTE
}

Necessário trocar os dados de conexão conforme comentários no sketch. Veja que o arquivo .PHP fica dentro de uma pasta chamada ambiente na raiz do meu servidor. Você pode mudar esse caminho, basta alterar no skecth.

Arquivo PHP

<?php

$temp = filter_input(INPUT_GET, 'temp', FILTER_SANITIZE_NUMBER_FLOAT);

$umid = filter_input(INPUT_GET, 'humid', FILTER_SANITIZE_NUMBER_FLOAT);

$lumi = filter_input(INPUT_GET, 'lumi', FILTER_SANITIZE_NUMBER_FLOAT);

if (is_null($temp) || is_null($humid) || is_null($lumi) ) {
  die("Dados inválidos");
}
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "ambiente";

$inc_date = date("Y-m-d H:i:s");

$conn = new mysqli($servername, $username, $password, $dbname);

if ($conn->connect_error) {
  die("Não foi possível estabelecer conexão com o BD: " . $conn->connect_error);
}

$sql = "INSERT INTO dados_ambiente (data, temp, umida, lumi) VALUES ('$inc_date',$temp,$umid,$lumi)";


if (!$conn->query($sql)) {
  die("Erro na gravação");
}

$conn->close();
?>

Não esqueça de trocar os dados de conexão no arquivo .PHP. Depois disso salve o arquivo PHP no servidor que rod

Script banco e tabela

SET FOREIGN_KEY_CHECKS=0;

CREATE DATABASE `ambiente`
    CHARACTER SET 'utf8'
    COLLATE 'utf8_general_ci';

USE `ambiente`;

#
# Structure for the `dados_ambiente` table : 
#

CREATE TABLE `dados_ambiente` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `data` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `temp` float(9,3) DEFAULT NULL,
  `umida` float(9,3) DEFAULT NULL,
  `lumi` float(9,3) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;

Vídeo do exemplo em funcionamento

Veja também o vídeo de como instalar os drivers e a placa na IDE do arduino. No vídeo utilizo um NodeMCU V3, porém serve 100% para o mini NodeMCU.

URL da instalação das placas utilizado no vídeo: http://arduino.esp8266.com/stable/package_esp8266com_index.json

Gostei da experiência com o módulo, tem um tamanho legal, possuí conectividade através do WIFI, fácil de usar e com certeza pode ser utilizado em vários projetos que não necessitam de muitas portas. Também imagino que dependendo do projeto, podemos usar vários desses se comunicando e trocando informações de forma a montar uma rede de monitoramento por exemplo.

Então é isso, aproveito para agradecer e lembrar que o post tem por objetivo apenas mostrar de forma simples o funcionamento do equipamento e de alguma forma contribuir para a imaginação e necessidade de cada um nos seus projetos.

Abraços e obrigado.