I thought I would share my project:
/*This sketch was designed by Nick Sebring December 9th, 2017.
* Connect to Wifi via Wemos D-1 Mini
* Display Wifi Connection
* Display IP address assigned by router
* Display MQTT Connection
* Get Adafruit VCNL 4010 proximity sensor readings to turn on/off led via MQTT
* Without any human interaction except for placing a chart in the bin.
*/
/*Wiring diagram
* WEMOS - VCNL
* 3V VIN
* G GND
* D2 SDA
* D1 SCL
* D5 LED (Dont forget the resistor!)
*/
#include <ESP8266WiFi.h>
#include <PubSubClient.h>
#include <Wire.h>
#include "Adafruit_VCNL4010.h"
// CONNECT TO WLAN
const char* ssid = "MYSSID";
const char* password = "MYPASSWORD";
const char* mqtt_server = "MQTT.IP.ADDRESS";
WiFiClient espClient;
PubSubClient client(espClient);
boolean reconnect() { // **********************************************************
// Loop until we're reconnected
while (!client.connected()) {
Serial.println (F("Contacting MQTT server..."));
// Attempt to connect
if (client.connect("PSChartSensor")) { //assign a "client name". Each wemos must have a unique name
Serial.println (F("connected"));
// ... SUBSCRIBE TO TOPICS
client.subscribe("Charts/PS");
return client.connected();
Serial.print (F("Failed to connect. "));
Serial.println (F(" Attempting connection again in 3 seconds"));
// Wait 3 seconds before retrying
// delay(3000);
return 0;
}
}
}
const int ledPin = D5;// for visual that signal was sent
Adafruit_VCNL4010 vcnl;
void setup()
{
pinMode(ledPin, OUTPUT);
digitalWrite(ledPin, LOW);// Set led off at start-up
{
Serial.begin(9600);
client.setServer(mqtt_server, 1883);
}
// Connect to WiFinetwork
Serial.println();
Serial.println();
Serial.print (F("Connecting to "));
Serial.println(ssid);
WiFi.begin(ssid, password);
WiFi.mode(WIFI_STA);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print (F("."));
}
Serial.println (F(""));
Serial.println (F("WiFi connected"));
// Print the IP address
Serial.print (F("Local IP: "));
Serial.println(WiFi.localIP());
Serial.println("VCNL4010 test");
if (! vcnl.begin()) {
Serial.println("Sensor not found :(");
while (1);
}
Serial.println("Found VCNL4010");
}
void loop()
{
if (!client.connected())
{
reconnect();
}
if (vcnl.readProximity() > 2150)//2125 seems to be ideal without plastic cover
{
client.publish("Charts/PS", "0");
Serial.println (F("Charts Up!"));
digitalWrite(ledPin, HIGH);
}
else
{
client.publish("Charts/PS", "1");
Serial.println (F("No Charts!"));
digitalWrite(ledPin, LOW);//
}
client.loop();
delay(500);
}