#include <ESP8266WiFi.h>
#include <ESP8266WiFiMulti.h>
#include <Wire.h>
#include <Adafruit_ADS1015.h>
Adafruit_ADS1115 ads(0x48);
ESP8266WiFiMulti WiFiMulti;
String host = "abc.ru";
String script = "my.php";
IPAddress proxy(192,168,0,2);
const int proxyPort = 3128;
void Update(String data) {
WiFiClient client;
if (client.connect(proxy, proxyPort)) {
Serial.println("connected to proxy");
// Comunicate with proxy
client.print(String( "CONNECT ")+host+":80 HTTP/1.1\r\n"+
"\r\n"+
"GET /"+script+data+" HTTP/1.1\r\n"+
"Host: "+host+"\r\n"+
"Connection: close\r\n"+
"\r\n");
unsigned long timeout = millis();
while (client.available() == 0) {
if (millis() - timeout > 5000) {
Serial.println(">>> Proxy Client Timeout !");
client.stop();
return;
}
}
// Read all the lines of the reply from server and print them to Serial
while(client.available()){
String line = client.readStringUntil('\r');
Serial.print(line);
}
} else {
Serial.println("connection to proxy failed");
}
client.stop();
}
void setup() {
Serial.begin(115200);
Serial.println();
Serial.println("Hi!");
WiFiMulti.addAP("myWiFi", "myKeyWord");
ads.begin();
}
void loop() {
if((WiFiMulti.run() == WL_CONNECTED)) {
Serial.println("Connection established");
int16_t adc0, adc1, adc2, adc3;
adc0 = ads.readADC_SingleEnded(0);//Измеряем напряжение
adc1 = ads.readADC_SingleEnded(1);//Измеряем напряжение
adc2 = ads.readADC_SingleEnded(2);//Измеряем напряжение
adc3 = ads.readADC_SingleEnded(3);//Измеряем напряжение
adc0 = int(adc0 * 0.1875);
adc1 = int(adc1 * 0.1875);
adc2 = int(adc2 * 0.1875);
adc3 = int(adc3 * 0.1875);
Serial.print("AIN0: "); Serial.println(adc0);
Serial.print("AIN1: "); Serial.println(adc1);
Serial.print("AIN2: "); Serial.println(adc2);
Serial.print("AIN3: "); Serial.println(adc3);
String Data = String("?A0="+adc0+"&A1="+adc1+"&A2="+adc2+"&A3="+adc3);
Update(Data);
Serial.println(Data);
delay(3000);
}
}
// отправка данных на народмон.ру с градусника ds18b20
// 26.01.2019 Собрано из авторского варианта, с добавлением работы с прокси, с форума ESP8266.
//28.01.2019 Реально работает.
#include <ESP8266WiFi.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#include <Ticker.h>
#include <ESP8266WiFiMulti.h>
#include <Wire.h>
#include <Adafruit_ADS1015.h>
Adafruit_ADS1115 ads(0x48);
ESP8266WiFiMulti WiFiMulti;
OneWire ds(2); // on pin 2 (a 4.7K resistor is necessary)
DallasTemperature sensors(&ds);
Ticker flipper;
//Прокси-сервер в конторе:
IPAddress proxy(192,168,102,62); //IP адресс Proxy
const int proxyPort = 8008; //Port Proxy
String script = "my.php"; //
const char* ssid = "Name WiFi"; //WiFi
const char* password = "Password WiFi"; //Пароль WiFi
const char* host = "[URL='http://www.narodmon.ru']www.narodmon.ru[/URL]"; //Адрес хоста "Народный мониторинг"
const int httpPort = 8283;
const int interval = 10*60; // 10 минут
int tm = interval;
int deviceCount = 0;
void flip(){
tm--;
// Serial.println(tm); //Вывод в сериал оставшегося времени
}
void setup() {
Serial.begin(115200);
delay(10);
sensors.begin();
delay(10);
deviceCount = sensors.getDeviceCount(); // узнаем количество подключенных градусников
// sensors.getAddress(Address18b20, 0);
sensors.setResolution(10); // устанавливаем разрешение градусника 9, 10, 11, или 12 bit
sensors.requestTemperatures(); // забераем температуру с градусника
//Send(); // при включении отправляем данные. При толчках питания забанят
flipper.attach(1, flip); // запускаем таймер
}
/// функция отправляет данные на народмон.ру
void Send() {
// Подключаемся к wifi
Serial.println();
Serial.println();
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print("."); //Пока подключается к WiFi выводятся точки
}
Serial.println(); // отправляем в Serial данные о WiFi подключении
Serial.println("WiFi connected");
Serial.print("IP address: ");
Serial.println(WiFi.localIP());
Serial.print("MAC address: ");
Serial.println(WiFi.macAddress());
Serial.println();
// подключаемся к proxy-серверу
Serial.println("connecting to proxy");
// Use WiFiClient class to create TCP connections
WiFiClient client;
if (client.connect(proxy, proxyPort)) {
//client.print(String( "CONNECT ")+host+":80 HTTP/1.1\r\n"+
// "\r\n"); //Ошибка 400
client.print(String( "CONNECT ")+host+":8283 HTTP/1.1\r\n"+"\r\n"); //Проходит соединение на narodmon
//client.print("CONNECT [URL='http://www.google.com:80']www.google.com:80[/URL] HTTP/1.1\r\n\r\n"); //Для отработки WiFi, чтобы народром не напрягать
client.print("#");
client.print(WiFi.macAddress()); // отправляем МАС нашей ESP8266
client.print("#");
client.print("ESP8266"); // название устройства
// client.print("#");
// client.print("45.031660#39.004750"); // координаты местонахождения датчика
client.println();
// в цикле отправляем данные с подключенных градусников.
for (int i = 0; i <= deviceCount - 1; i++){
DeviceAddress Address18b20;
sensors.getAddress(Address18b20, i);
float temp = sensors.getTempC(Address18b20);
client.print("#");
for(int i = 0; i < 8; i++) client.print(Address18b20[I], HEX); // номер 18b20
client.print("#");
client.println(temp);
}
client.println("##");
}
else {
Serial.println("connection to proxy failed");
return;
}
delay(10);
// читаем ответ с и отправляем его в сериал
// вообще на ответ нужно както реагировать
Serial.print("Requesting: ");
while(client.available()){
String line = client.readStringUntil('\r');
Serial.print(line);
}
client.stop(); //
Serial.println();
Serial.println();
Serial.println("Closing connection");
// WiFi.disconnect(); // отключаемся от сети 28.01.2019 Не подключается повторно, только первый раз
Serial.println("Disconnect WiFi.");
}
void loop() {
if (tm == 0){ // если таймер отработал
flipper.detach(); // выключаем
tm = interval; // сбрасываем переменную таймера
sensors.requestTemperatures(); // забераем температуру с градусника
delay(10);
Send(); // отправляем
flipper.attach(1, flip); // включаем прерывание по таймеру
}
}
#include <ESP8266WiFi.h>
#include <ESP8266WiFiMulti.h>
#include <PubSubClient.h>
ESP8266WiFiMulti WiFiMulti;
IPAddress proxy(192,168,0,5);
const int proxyPort = 8080;
const char* ssid = "Wi-Fi";
const char* password = "xxxxxxxx";
const char *mqtt_server = "postman.cloudmqtt.com";
const int mqtt_port = 14235;
const char *mqtt_user = "zzzzzz";
const char *mqtt_pass = "ffffffff";
const int LED = 2;
int b = 0;
#define BUFFER_SIZE 100
void callback(const MQTT::Publish& pub)
{
String payload = pub.payload_string();
if(String(pub.topic()) == "test/led")
{
String dataSt = String(payload);
b = dataSt.substring(dataSt.lastIndexOf(',')+1).toInt();
digitalWrite(LED, b);
Serial.println(dataSt);
}
}
void setup() {
Serial.begin(115200);
pinMode (2,OUTPUT);
}
WiFiClient wclient;
PubSubClient client(wclient, mqtt_server, mqtt_port);
void loop()
{
if (WiFi.status() != WL_CONNECTED)
{
WiFi.begin(ssid, password);
if (WiFi.waitForConnectResult() != WL_CONNECTED)
return;
}
if (WiFi.status() == WL_CONNECTED)
{
WiFiClient wwclient;
wwclient.connect(proxy, proxyPort);
if (!client.connected())
{
if (client.connect(MQTT::Connect("esp8266led")
.set_auth(mqtt_user, mqtt_pass)))
{
client.set_callback(callback);
client.subscribe("test/led");
}
}
if (client.connected()){
client.loop();
}
}
}