Markdown source

# Appunti sui moduli ESP8266-12F

<abstract>
Appunti vari sui miei esperimenti con i moduli ESP8266-12F
</abstract>

Per le prove ho usato un modulo AZ-Delivery D1 mini con NodeMCU ESP8266-12F, 100% compatibile con Wemos D1 mini Wifi 
acquistato su Amazon Prime a circa 5 euro l'uno:

* [AZ-Delivery D1 mini su amazon.it](https://www.amazon.it/gp/product/B0754N794H/ref=ppx_yo_dt_b_asin_title_o04_s00?ie=UTF8&psc=1)
 
<img src="./d1mini.jpg" width="320px">

Per le prove conil sensore di umidità, temperatura e pressione ho usato un modulo AZ-Delivery GY-BME280
acquistabile su Amazon a circa 6 euro:

* [AZ-Delivery GY-BME280 su amazon.it](https://www.amazon.it/gp/product/B07FS95JXT/ref=ppx_yo_dt_b_asin_title_o04_s00?ie=UTF8&psc=1)


<img src="./bmp280.jpg" width="180px">

Pinout 

<img src="./d1-mini-pinout.png" width="640px">

## Installazione ambiente di sviluppo Arduino (su Windows 10)

Scaricare l'IDE Arduino da questo link:

* [Download the Arduino IDE](https://www.arduino.cc/en/Main/Software) Provato con la versione 1.8.11

Dal menu <b>File->Impostazioni</b> inserire nel campo <b>URL aggiuntive per il gestore schede</b> la seguente URL:

	http://arduino.esp8266.com/stable/package_esp8266com_index.json

Installare la scheda <b>esp8266</b> dal menu <b>Strumenti->Scheda->Gestore schede</b>

### Installazione libreria MQTT

Scaricare lo zip del repository GitHub di questa libreria:

* <https://github.com/Imroy/pubsubclient>

Quindi installare la libreria nell'IDE Arduino dal menu <b>Sketch->#Include Libreria->Aggiungere Libreria da file ZIP</b>

### Installazione libreria BME280

Dal menu <b>Sketch->Gestione librerie</b> installa la libreria <b>Adafruit BME280 Library</b>

### Collegamento su USB

Inserire la scheda D1 mini alla porta USB del PC

Dal menu <b>Strumenti->Scheda</b> seleziona:

	Wemos D1 R1	

Dal menu <b>Strumenti->Porta</b> selezionare la porta seriale su USB assegnata al D1 mini. E' possibile vedere l'assegnazione 
dal <b>Pannello di controllo di Windows->Dispositivi->Bluetooth e altri dispositivi</b>.

Con questa configurazione dovrebbe essere possibile compilare e trasferire sul D1 mini un programma Arduino.

## Applicazione temosensore WiFi

Collegare i moduli AZ-Delivery D1 mini e AZ-Delivery GY-BME280 in questo modo

| D1 mini | GY-BME280 |
|---------|-----------|
| D1      | SCL       |
| D2      | SDA       |
| G       | GND       |
| 3V3     | VIN       |

Scaricare questo sorgente:

* [termosensor.ino](./termosensor.ino)

Settare le credenziali di accesso alla propria WiFi combiando queste righe di codice:

	//----WIFI CONFIG ----
	#define WIFI_SSID           "acmetest" //your Wifi SSID
	#define WIFI_PASSWD         "acmetest" //your wifi password

Settare l'IP del server MQTT sulla propria rete ed il topic in cui scrivere i valori rilevati:

	//----MQTT CONFIG ----
	#define MQTT_SERVER         "192.168.4.31"
	#define MQTT_UNAME          ""
	#define MQTT_PASSW          ""
	#define MQTT_BROKER_PORT    1883          //MQTT BROKER listening port
	#define MQTT_CLIENT_ID      "S1"
	#define MQTT_TOPIC          "S1"
	#define MQTT_TOPIC_T        "S1/T"

# Display LCD 16x2 I2C

<img src="./lcd.jpg" width="340px">

Pinout LCD WO1602I-TFH-AT# (pin 1 a sinistra guardando il display con i pin in basso)

	1 5V
	2 NC
	3 NC
	4 5V
	5 GND
	6 SDA ----> D2 con 10K verso 3V3
	7 SCL ----> D1 con 10K verso 3V3
	8 RST ----> 3V3
	
	K GND
	A 3V3

* [lcd.ino](./lcd.ino)	
* [Libreria per Arduino](https://forum.arduino.cc/index.php?topic=145424.0)
* [Datasheet](https://www.acmesystems.it/download/datasheets/LCD-1.pdf)

Pins

	WeMos  Arduino  Use
     D0	       16   Red Led
     D1         5
     D2         4
     D3         0   Blue button 
	 D4         2
	 D5        14
	 D6        12
	 D7        13
	 D8        15
	 TX         1
     RX         3 

* [Pin numbering for WeMos D1 Mini](https://chewett.co.uk/blog/1066/pin-numbering-for-wemos-d1-mini-esp8266/)

## HC-SR04

<img src="./wemos-and-hcsr04_bb.png" width="320px">

	#define echoPin D7 // Echo Pin
	#define trigPin D6 // Trigger Pin
	 
	long duration, distance; // Duration used to calculate distance
	 
	void setup()
	{
	  Serial.begin (9600);
	  pinMode(trigPin, OUTPUT);
	  pinMode(echoPin, INPUT);
	}
	 
	void loop()
	{
	  /* The following trigPin/echoPin cycle is used to determine the
	  distance of the nearest object by bouncing soundwaves off of it. */
	  digitalWrite(trigPin, LOW);
	  delayMicroseconds(2);
	  digitalWrite(trigPin, HIGH);
	  delayMicroseconds(10);
	  digitalWrite(trigPin, LOW);
	  duration = pulseIn(echoPin, HIGH);
	  //Calculate the distance (in cm) based on the speed of sound.
	  distance = duration/58.2;
	  Serial.println(distance);
	  //Delay 50ms before next reading.
	  delay(50);
	}

* <http://www.esp8266learning.com/wemos-mini-hc-sr04-ultrasonic-sensor.php>

## Links

* <http://www.esp8266learning.com/wemos-mini-hc-sr04-ultrasonic-sensor.php>
* [Datasheet modulo ESP-12F](https://docs.ai-thinker.com/_media/esp8266/docs/esp-12f_product_specification_en.pdf)
* [Datasheet Bosch BME280](https://www.bosch-sensortec.com/products/environmental-sensors/humidity-sensors-bme280/)
* [Esempio MQTT](https://mancusoa74.blogspot.com/2017/02/mqtt-basic-per-esp8266.html)
* [Libreria per BME280](https://randomnerdtutorials.com/esp8266-bme280-arduino-ide/)
* <https://github.com/Imroy/pubsubclient>
* @article='ESP8266'
* @article='ESP32'