PS - хотя по ДАТАШИТ написано, что БОЛЕЕ "More than 100,000 erase/program cycles"
Ну да, это нижний порог, ГАРАНТИРУЕМЫЙ ПРОИЗВОДИТЕЛЕМ. На практике число циклов записи сильно зависит от частоты обращения и температуры чипа. В интернете можно найти тесты, где люди ставили ардуиновский ЕПРОМ на запись в цикле и получали 5-10 млн и более беспроблемных проходов при обещанном ресурсе 100 000.
Я как программист по работе, всегда исхожу из надежности железо/код программы. Ну а для дома, данные, приведенного выше кода, можно и на брокере хранить :-) , как пример.
Друзья, помогите разобраться с кодом? У меня на одной ардуинке висят датчики давления, температуры, влажности и т.п. Крутится MQTT брокер на большой машине. Теперь захотел на отдельной ESPишке повесить маленький (дюймовый) OLED дисплей. Чтобы переносить по всему дому в виде дистанционного градусника забортной температуры. Набросал скетч, залил. Каждые три секунды, прилетает значение температуры. В мониторе порта вижу. Температура каждые три секунды разная. А вот на подключенном дисплее, выводит температуру только из первого сообщения. Потом это значение горит неизменно. Хотя в порт отправляет разные значения. Куда копать? мож забыл какую нить команду по очистке/инициализации экрана?
#include <ESP8266WiFi.h>
#include <PubSubClient.h>
#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
float temp;
#define OLED_RESET D4
Adafruit_SSD1306 display(OLED_RESET);
#define NUMFLAKES 10
#define XPOS 0
#define YPOS 1
#define DELTAY 2
const char *ssid = "ssssssssss"; // Имя вайфай точки доступа
const char *pass = "zzzzzzzzzzz"; // Пароль от точки доступа
const char *mqtt_server = "192.168.1.182"; // Имя сервера MQTT
const int mqtt_port = 1883; // Порт для подключения к серверу MQTT
const char *mqtt_user = "Login"; // Логи от сервер
const char *mqtt_pass = "Pass"; // Пароль от сервера
#define BUFFER_SIZE 100
bool LedState = false;
int tm=300;
//float temp=0;
// Функция получения данных от сервера
void callback(const MQTT::Publish& pub)
{
Serial.print(pub.topic()); // выводим в сериал порт название топика
Serial.print(" => ");
Serial.print(pub.payload_string()); // выводим в сериал порт значение полученных данных
Serial.println();
display.clearDisplay();
display.setTextColor(WHITE);
display.setTextSize(4);
display.setCursor(0,30);
display.println(pub.payload_string());
display.display();
String payload = pub.payload_string();
if(String(pub.topic()) == "home/data/sensor/temp_in") // проверяем из нужного ли нам топика пришли данные
{
int stled = payload.toInt(); // преобразуем полученные данные в тип integer
digitalWrite(5,stled); // включаем или выключаем светодиод в зависимоти от полученных значений данных
}
}
WiFiClient wclient;
PubSubClient client(wclient, mqtt_server, mqtt_port);
void setup() {
display.begin(SSD1306_SWITCHCAPVCC, 0x3C); // initialize with the I2C addr 0x3D (for the 128x64)
Serial.begin(115200);
delay(10);
Serial.println();
Serial.println();
}
void loop() {
// подключаемся к wi-fi
if (WiFi.status() != WL_CONNECTED) {
Serial.print("Connecting to ");
Serial.print(ssid);
Serial.println("...");
WiFi.begin(ssid, pass);
if (WiFi.waitForConnectResult() != WL_CONNECTED)
return;
Serial.println("WiFi connected");
}
// подключаемся к MQTT серверу
if (WiFi.status() == WL_CONNECTED) {
if (!client.connected()) {
Serial.println("Connecting to MQTT server");
if (client.connect(MQTT::Connect("arduinoClient2")
.set_auth(mqtt_user, mqtt_pass))) {
Serial.println("Connected to MQTT server");
client.set_callback(callback);
client.subscribe("home/data/sensor/temp_in"); // подписывааемся по топик с данными для светодиода
} else {
Serial.println("Could not connect to MQTT server");
}
}
if (client.connected()){
client.loop();
}
}
} // конец основного
Здравствуйте. Подскажите неграмотному как правильно в коде вставить MQTT функцию retain? и где надо её добавлять я сделал это только в отправке строки брокеру, ни в калбек ни в подписках я ничего не добавил. наверное это неправильно?
PS - хотя по ДАТАШИТ написано, что БОЛЕЕ "More than 100,000 erase/program cycles"
Ну да, это нижний порог, ГАРАНТИРУЕМЫЙ ПРОИЗВОДИТЕЛЕМ. На практике число циклов записи сильно зависит от частоты обращения и температуры чипа. В интернете можно найти тесты, где люди ставили ардуиновский ЕПРОМ на запись в цикле и получали 5-10 млн и более беспроблемных проходов при обещанном ресурсе 100 000.
Ушли от темы обсуждения.
Я как программист по работе, всегда исхожу из надежности железо/код программы. Ну а для дома, данные, приведенного выше кода, можно и на брокере хранить :-) , как пример.
Давайте оставим соревнование в знаниях ......
Друзья, помогите разобраться с кодом? У меня на одной ардуинке висят датчики давления, температуры, влажности и т.п. Крутится MQTT брокер на большой машине. Теперь захотел на отдельной ESPишке повесить маленький (дюймовый) OLED дисплей. Чтобы переносить по всему дому в виде дистанционного градусника забортной температуры. Набросал скетч, залил. Каждые три секунды, прилетает значение температуры. В мониторе порта вижу. Температура каждые три секунды разная. А вот на подключенном дисплее, выводит температуру только из первого сообщения. Потом это значение горит неизменно. Хотя в порт отправляет разные значения. Куда копать? мож забыл какую нить команду по очистке/инициализации экрана?
Странно. Попробуй записать данные в переменную, а потом на вывод ее. А не просто pub.payload_string()
Понял. Спасибо. Попробую завтра.
Здравствуйте. Подскажите неграмотному как правильно в коде вставить MQTT функцию retain? и где надо её добавлять я сделал это только в отправке строки брокеру, ни в калбек ни в подписках я ничего не добавил. наверное это неправильно?