Когда поставите Ардуино для ESP, там полнО примеров, берите любой. При этом вам внешний Ардуино будет не нужен. Сам ESP может работать как Ардуино и исполнять скетчи.
И вообще, чтобы не париться с железом и подключениями, купите лучше модуль NodeMCU и грузите в него ардуиновские скетчи для ESP. В этом модуле "в одном флаконе" уже все собрано и правильно подключено: и ESP , и питание, и UART-USB.
у меня есть такая идея входные 5 аналоговых, и цифровой, выход 1 цифровой, для этого подходит любая ардуинка, и вот это всё хочу по вай-фай пересылать на МД, конечно хочу использовать ЕСП-12, как это организовать только ЕСП не подходит мало аналоговых. Может у кого есть ссылка как это осуществить.
A I2C расширителя у меня нет, заказывать это два месяца может пройти, будет не актуально уже. Да это было бы здорово использовать PCF8591 или ADS1115 под них уже ESPEASY предусмотрена опция, но как уже писал нет у меня пока таких хочу сгородить из того что имеется.
нашёл более менее нормальный скетч с обезьянить, но всё же есть вопросы к понимающим, всё ли правильно понял, я свои комментарии в скетче выделил, где мне не совсем понято как с оригинала thingsboardServer перенаправить к своему Мajordomo серверу.
И поскольку нет на этом форуме рабочего скетча по применению большего числа аналоговых входов для ESP8266, может и другим подойдёт.
#define WIFI_AP "YOUR_WIFI_AP" // здесь мой ssid
#define WIFI_PASSWORD "YOUR_WIFI_PASSWORD" //здесь мой password
#define TOKEN "ARDUINO_DEMO_TOKEN" //что с этим за комментировать?
char thingsboardServer[] = "YOUR_THINGSBOARD_HOST_OR_IP"; //тут я понимаю надо вписать IP Маего сервера
client.setServer( thingsboardServer, 1883 );//порт MQTT Маего 1883
soft.begin(9600); // тут может быт проблема с скоростью 9600 в инструкции пишут: "Обратите внимание, что скорость последовательной передачи ESP8266 должна быть установлена равной 9600 следующей командой AT: AT + UART_DEF = 9600,8,1,0,0"
if ( client.connect("Arduino Uno Device", TOKEN, NULL) ) // и тут токен запрашивает а начинаеш стиран вряд ли ошибок избежать
Код:
#include "DHT.h"
#include <WiFiEspClient.h>
#include <WiFiEsp.h>
#include <WiFiEspUdp.h>
#include <PubSubClient.h>
#include "SoftwareSerial.h"
#define WIFI_AP "YOUR_WIFI_AP"
#define WIFI_PASSWORD "YOUR_WIFI_PASSWORD"
#define TOKEN "ARDUINO_DEMO_TOKEN"
// DHT
#define DHTPIN 4
#define DHTTYPE DHT22
char thingsboardServer[] = "YOUR_THINGSBOARD_HOST_OR_IP";
// Initialize the Ethernet client object
WiFiEspClient espClient;
// Initialize DHT sensor.
DHT dht(DHTPIN, DHTTYPE);
PubSubClient client(espClient);
SoftwareSerial soft(2, 3); // RX, TX
int status = WL_IDLE_STATUS;
unsigned long lastSend;
void setup() {
// initialize serial for debugging
Serial.begin(9600);
dht.begin();
InitWiFi();
client.setServer( thingsboardServer, 1883 );
lastSend = 0;
}
void loop() {
status = WiFi.status();
if ( status != WL_CONNECTED) {
while ( status != WL_CONNECTED) {
Serial.print("Attempting to connect to WPA SSID: ");
Serial.println(WIFI_AP);
// Connect to WPA/WPA2 network
status = WiFi.begin(WIFI_AP, WIFI_PASSWORD);
delay(500);
}
Serial.println("Connected to AP");
}
if ( !client.connected() ) {
reconnect();
}
if ( millis() - lastSend > 1000 ) { // Update and send only after 1 seconds
getAndSendTemperatureAndHumidityData();
lastSend = millis();
}
client.loop();
}
void getAndSendTemperatureAndHumidityData()
{
Serial.println("Collecting temperature data.");
// Reading temperature or humidity takes about 250 milliseconds!
float h = dht.readHumidity();
// Read temperature as Celsius (the default)
float t = dht.readTemperature();
// Check if any reads failed and exit early (to try again).
if (isnan(h) || isnan(t)) {
Serial.println("Failed to read from DHT sensor!");
return;
}
Serial.print("Humidity: ");
Serial.print(h);
Serial.print(" %\t");
Serial.print("Temperature: ");
Serial.print(t);
Serial.print(" *C ");
String temperature = String(t);
String humidity = String(h);
// Just debug messages
Serial.print( "Sending temperature and humidity : [" );
Serial.print( temperature ); Serial.print( "," );
Serial.print( humidity );
Serial.print( "] -> " );
// Prepare a JSON payload string
String payload = "{";
payload += "\"temperature\":"; payload += temperature; payload += ",";
payload += "\"humidity\":"; payload += humidity;
payload += "}";
// Send payload
char attributes[100];
payload.toCharArray( attributes, 100 );
client.publish( "v1/devices/me/telemetry", attributes );
Serial.println( attributes );
}
void InitWiFi()
{
// initialize serial for ESP module
soft.begin(9600);
// initialize ESP module
WiFi.init(&soft);
// check for the presence of the shield
if (WiFi.status() == WL_NO_SHIELD) {
Serial.println("WiFi shield not present");
// don't continue
while (true);
}
Serial.println("Connecting to AP ...");
// attempt to connect to WiFi network
while ( status != WL_CONNECTED) {
Serial.print("Attempting to connect to WPA SSID: ");
Serial.println(WIFI_AP);
// Connect to WPA/WPA2 network
status = WiFi.begin(WIFI_AP, WIFI_PASSWORD);
delay(500);
}
Serial.println("Connected to AP");
}
void reconnect() {
// Loop until we're reconnected
while (!client.connected()) {
Serial.print("Connecting to Thingsboard node ...");
// Attempt to connect (clientId, username, password)
if ( client.connect("Arduino Uno Device", TOKEN, NULL) ) {
Serial.println( "[DONE]" );
} else {
Serial.print( "[FAILED] [ rc = " );
Serial.print( client.state() );
Serial.println( " : retrying in 5 seconds]" );
// Wait 5 seconds before retrying
delay( 5000 );
}
}
}
Результат:
[WiFiEsp] Initializing ESP module
[WiFiEsp] >>> TIMEOUT >>>
[WiFiEsp] Cannot initialize ESP module
[WiFiEsp] >>> TIMEOUT >>>
[WiFiEsp] No tag found
WiFi shield not present