SOFT WDT Reset (Wemos D1 mini Pro 16M)
- Войдите на сайт для отправки комментариев
Пнд, 28/03/2022 - 10:39
Приветствую Ардуинщиков и профессионалов своего дела.
Требуется небольшая помощь, возник вопрос, создал погодную станцию на собственной плате. И вот всё вроде бы ничего, написал скетч, вроде бы всё работает, но при запуске выдает вот такое в монитор порта:
Soft WDT reset >>>stack>>> ctx: cont sp: 3ffffda0 end: 3fffffc0 offset: 01b0 3fffff50: 53444653 fe000f00 003d0900 feef0001 3fffff60: feefeffe feefeffe feefeffe feefeffe 3fffff70: feefeffe feefeffe feefeffe feefeffe 3fffff80: feefeffe feefeffe feefeffe feefeffe 3fffff90: feefeffe feefeffe feefeffe 3ffeedf4 3fffffa0: 3fffdad0 00000000 3ffeedb4 4020cb68 3fffffb0: feefeffe feefeffe 3ffe857c 40100e95 <<<stack<<< ets Jan 8 2013,rst cause:2, boot mode:(3,6) load 0x4010f000, len 1384, room 16 tail 8 chksum 0x2d csum 0x2d vffffffff ~ld ⸮bl`r⸮nlph Initializing SD card...initialization failed! Manufacturer ID=0xFFFF Device ID=0xFFFF Could not find a valid BMP280 sensor, check wiring!
Ниже привожу полный скетч:
#include <ESP8266WiFi.h> #include <PubSubClient.h> #include <Wire.h> #include <RtcDS1307.h> #include <SPI.h> #include <SD.h> #include <Ticker.h> #include "ClosedCube_HDC1080.h" #include "Adafruit_MCP23X17.h" #include <Adafruit_ADS1015.h> #include <Adafruit_BMP280.h> #include <BH1750FVI.h> Adafruit_ADS1015 ads; /* Use thi for the 12-bit version */ Adafruit_MCP23X17 mcp; Adafruit_BMP280 bmp; // I2C BH1750FVI myBH1750(BH1750_DEFAULT_I2CADDR, BH1750_ONE_TIME_HIGH_RES_MODE_2, 1.085, BH1750_ACCURACY_DEFAULT); File myFile; RtcDS1307<TwoWire> Rtc(Wire); ClosedCube_HDC1080 hdc1080; Ticker ClockTimer; #define countof(a) (sizeof(a) / sizeof(a[0])) #define CDSS 15 #define mcpPinLed 11 #define mcpPinPON 9 #define mcpPin_OnOff_Button 10 //#define OnOff_Button 0 byte buttoncount = 0; //#define LedPin 2 //#define Power_On 16 const char *LogFileName = "log.csv"; const char *ssid = "switch01"; // Имя вайфай точки доступа const char *pass = "f89mn2xK"; // Пароль от точки доступа const char *mqtt_server = "192.168.10.xxx"; // Имя сервера MQTT const int mqtt_port = 18xx; // Порт для подключения к серверу MQTT const char *mqtt_user = "antxxxo"; // Логин от сервер const char *mqtt_pass = "Al1EaNt2xx4"; // Пароль от сервера const char * months[] = {"Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"} ; byte ss = 0; // секунды byte mm = 0; // минуты byte hh = 0; // часы byte da = 0; // день byte mo = 0; // месяц int yea = 0; // год byte DataTimer = 0; #define MaxDataTimer 30 byte Prev_min = 0; // минуты byte DataUpdate = 1; byte SDpresed = 0; char Buffer[] = "Hello String"; float BattVoltage = 0.0; float PanelVoltage = 0.0; float ChargingCurrent = 0.0; float DisChargCurrent = 0.0; float ChargingCurrentCount = 0.0; float DisChargCurrentCount = 0.0; byte Count = 0; float Temperature = 0.0; float Humidity = 0.0; float PressurePA = 0.0; float PressureMM = 0.0; float Lightlevel = 0.0; void timerIsr() { DataUpdate = 1; } void callback(const MQTT::Publish& pub) // Функция получения данных от сервера { Serial.print(pub.topic()); // выводим в сериал порт название топика Serial.print(F(" => ")); Serial.println(pub.payload_string()); // выводим в сериал порт значение полученных данных String payload = pub.payload_string(); if(String(pub.topic()) == "WStation/DateTimeSet") // проверяем из нужного ли нам топика пришли данные { String DateSet = payload.substring(0, 12); // устанавливаем дату и время String TimeSet = payload.substring(12); char userDate[12]; char userTime[9]; DateSet.toCharArray(userDate, 12); TimeSet.toCharArray(userTime, 9); RtcDateTime manual = RtcDateTime(userDate, userTime); Rtc.SetDateTime(manual); Serial.print(userDate); Serial.print(F(" ")); Serial.println(userTime); } if(String(pub.topic()) == "WStation/TimeCorrect") // проверяем из нужного ли нам топика пришли данные { int timeCorrect = payload.toInt(); // преобразуем полученные данные в тип integer mm = mm + timeCorrect; if (mm > 59){ mm = 0; hh++; } /* Sample: RtcDateTime manual = RtcDateTime("Jan 25 2017", "16:30:00")); // минуты и секунды двузначные! Rtc.SetDateTime(manual); */ char userDate[11]; // формирование строки даты в формате МММ ДД ГГГГ sprintf(userDate,"%s %d %d", months[mo-1], da, yea); char userTime[8]; // формирование строки времени в формате ЧЧ:ММ:СС sprintf(userTime,"%02d:%02d:%02d", hh, mm, ss); RtcDateTime manual = RtcDateTime(userDate, userTime); Rtc.SetDateTime(manual); Serial.print(userDate); Serial.print(F(" ")); Serial.println(userTime); } } WiFiClient wclient; PubSubClient client(wclient, mqtt_server, mqtt_port); void setup () { // The ADC input range (or gain) can be changed via the following // functions, but be careful never to exceed VDD +0.3V max, or to // exceed the upper and lower limits if you adjust the input range! // Setting these values incorrectly may destroy your ADC! // ADS1015 ADS1115 // ------- ------- //ads.setGain(GAIN_TWOTHIRDS); // 2/3x gain +/- 6.144V 1 bit = 3mV 0.1875mV (default) // ads.setGain(GAIN_ONE); // 1x gain +/- 4.096V 1 bit = 2mV 0.125mV // ads.setGain(GAIN_TWO); // 2x gain +/- 2.048V 1 bit = 1mV 0.0625mV ads.setGain(GAIN_FOUR); // 4x gain +/- 1.024V 1 bit = 0.5mV 0.03125mV // ads.setGain(GAIN_EIGHT); // 8x gain +/- 0.512V 1 bit = 0.25mV 0.015625mV // ads.setGain(GAIN_SIXTEEN); // 16x gain +/- 0.256V 1 bit = 0.125mV 0.0078125mV ads.begin(); mcp.begin_I2C(); // use default address 0 mcp.pinMode(mcpPinLed, OUTPUT); mcp.digitalWrite(mcpPinLed, LOW); mcp.pinMode(mcpPinPON, OUTPUT); //mcp.digitalWrite(mcpPinPON, LOW); mcp.pinMode(mcpPin_OnOff_Button, INPUT); //pinMode(Power_On, OUTPUT); //pinMode(OnOff_Button, INPUT); //pinMode(OnOff_Button, INPUT_PULLUP); //pinMode(LedPin, OUTPUT); //digitalWrite(LedPin, HIGH); //digitalWrite(Power_On, LOW); delay(500); //digitalWrite(Power_On, HIGH); mcp.digitalWrite(mcpPinLed, HIGH); //digitalWrite(LedPin, LOW); mcp.digitalWrite(mcpPinPON, HIGH); Serial.begin(115200); Serial.println(F("")); Serial.print(F("Initializing SD card...")); if (!SD.begin(CDSS)) { Serial.println(F("initialization failed!")); SDpresed = 0; }else{ Serial.println(F("initialization done.")); SDpresed = 1; if (!SD.exists(LogFileName)) { myFile = SD.open(LogFileName, FILE_WRITE); if (myFile) { Serial.print(F("Writing to ")); Serial.print(LogFileName); Serial.print(F("...")); myFile.print("Date:"); myFile.print(","); myFile.print("Time:"); myFile.print(","); myFile.print("V Batt."); myFile.print(","); myFile.print("V SolarPanel."); myFile.print(","); myFile.print("mA Charging"); myFile.print(","); myFile.print("mA Discharg."); myFile.print(","); myFile.print("Temperature:"); myFile.print(","); myFile.print("Humidity:"); myFile.print(","); myFile.print("Pressure Pa.:"); myFile.print(","); myFile.print("Pressure mm.Rt.st:"); myFile.print(","); myFile.println("Light level:"); Serial.println(F("done.")); Serial.println(F("")); } else { Serial.print(F("error opening")); Serial.println(LogFileName); } myFile.close(); } } hdc1080.begin(0x40); Serial.print(F("Manufacturer ID=0x")); Serial.println(hdc1080.readManufacturerId(), HEX); // 0x5449 ID of Texas Instruments Serial.print(F("Device ID=0x")); Serial.println(hdc1080.readDeviceId(), HEX); // 0x1050 ID of the device if (!bmp.begin()) { Serial.println(F("Could not find a valid BMP280 sensor, check wiring!")); while (1); } if (!myBH1750.begin()) { Serial.println(F("ROHM BH1750FVI is not present")); //(F()) saves string to flash & keeps dynamic memory free } Rtc.Begin(); Serial.println(); if (!Rtc.GetIsRunning()) { Serial.println(F("RTC was not actively running, starting now")); Rtc.SetIsRunning(true); } RtcDateTime now = Rtc.GetDateTime(); Rtc.SetSquareWavePin(DS1307SquareWaveOut_Low); ClockTimer.attach(1, timerIsr); } void loop () { if (WiFi.status() != WL_CONNECTED) { Serial.print(F("Connecting to ")); Serial.print(ssid); Serial.println(F("...")); WiFi.begin(ssid, pass); if (WiFi.waitForConnectResult() != WL_CONNECTED) return; Serial.println(F("WiFi connected")); } // подключаемся к MQTT серверу if (WiFi.status() == WL_CONNECTED) { if (!client.connected()) { Serial.println(F("Connecting to MQTT server")); if (client.connect(MQTT::Connect("arduinoClient2") .set_auth(mqtt_user, mqtt_pass))) { Serial.println(F("Connected to MQTT server")); client.set_callback(callback); client.subscribe("WStation/DateTimeSet"); // подписывааемся по топик с данными для установки даты / времени client.subscribe("WStation/TimeCorrect"); // подписывааемся по топик с данными для корректировки времени } else { Serial.println(F("Could not connect to MQTT server")); } } if (client.connected()){ client.loop(); } } if (DataUpdate){ Serial.println(F(" => ")); DataUpdate = 0; GetData(); if (Prev_min != mm){ Serial.println(F(" => 2")); Prev_min = mm; if (SDpresed){ DataLog(); } } DataTimer++; if (DataTimer > MaxDataTimer){ Serial.println(F(" => 3")); DataTimer = 0; SendData(); } if (mcp.digitalRead(mcpPin_OnOff_Button) == HIGH) { Serial.println(F(" => 4")); buttoncount++; if (buttoncount > 1){ Serial.println(F(" => 5")); buttoncount = 0; Power_OFF(); } } else{ buttoncount = 0; } } } void Power_OFF(){ //digitalWrite(LedPin, HIGH); mcp.digitalWrite(mcpPinLed, LOW); delay(2500); Serial.println(F(" => 6")); //digitalWrite(Power_On, LOW); mcp.digitalWrite(mcpPinPON, LOW); Serial.println(F(" => 7")); } void GetData(){ // ------ Date & Time ---------------------------------------------------------------------------------------- if (!Rtc.IsDateTimeValid()) { if (Rtc.LastError() != 0) { Serial.print(F("RTC communications error = ")); Serial.println(Rtc.LastError()); } else { Serial.println(F("RTC lost confidence in the DateTime!")); } } RtcDateTime now = Rtc.GetDateTime(); ss = now.Second(); mm = now.Minute(); hh = now.Hour(); da = now.Day(); mo = now.Month(); yea = now.Year(); // ----- Battery ---------------------------------------------------------------------------------------------- int16_t results; int16_t adc0; int sample1 = 0; int sample2 = 0; for(int i=0;i< 80;i++) { sample1 = sample1 + ads.readADC_Differential_0_3(); sample2 = sample2 + ads.readADC_Differential_1_3(); delay(2); } results = sample1 / 80; //results = ads.readADC_Differential_0_3(); Serial.print(F("Charging 0-3: ")); Serial.print(results); Serial.print(F("(")); Serial.print(results * 0.5); Serial.println(F("mV)")); ChargingCurrentCount = ChargingCurrentCount + float(results * 0.5) / 0.26666; results = sample2 / 80; //results = ads.readADC_Differential_1_3(); Serial.print(F("DisCharging 1-3: ")); Serial.print(results); Serial.print(F("(")); Serial.print(results * 0.5); Serial.println(F("mV)")); DisChargCurrentCount = DisChargCurrentCount + float(results * 0.5) / 0.26666; adc0 = ads.readADC_SingleEnded(3); BattVoltage = (float((adc0 * 0.5) / 1000.0)) / 0.2675; adc0 = ads.readADC_SingleEnded(2); PanelVoltage = float((adc0 * 0.5) / 1000.0) / 0.1277; if (BattVoltage < 2.55){ Power_OFF(); } Count++; if (Count > 59){ Count = 0; ChargingCurrent = ChargingCurrentCount / 60.0; DisChargCurrent = DisChargCurrentCount / 60.0; ChargingCurrentCount = 0; DisChargCurrentCount = 0; } Serial.println(BattVoltage); Serial.println(PanelVoltage); Serial.println(ChargingCurrent); Serial.println(DisChargCurrent); //----- Temperature & Humidity ----------------------------------------------------------------------------------- Temperature = hdc1080.readTemperature(); Humidity = hdc1080.readHumidity(); //----- Pressure ------------------------------------------------------------------------------------------------- PressurePA = bmp.readPressure(); PressureMM = PressurePA / 133.3; //----- Light level ---------------------------------------------------------------------------------------------- Lightlevel = myBH1750.readLightLevel(); Serial.print(F("Light level: ")); Serial.println(Lightlevel); } void DataLog(){ Serial.println(); myFile = SD.open(LogFileName, FILE_WRITE); if (myFile) { Serial.println(F("Writing to log.csv...")); sprintf(Buffer,"%02u.%02u.%02u", da, mo, yea); myFile.print(Buffer); // запись в файл даты myFile.print(","); Serial.print(F("Date / Time: "));Serial.print(Buffer); sprintf(Buffer,"%02u:%02u:%02u", hh, mm, ss); myFile.print(Buffer); // запись в файл времени Serial.print(F(" "));Serial.println(Buffer); myFile.print(","); myFile.print(BattVoltage); // запись в файл напряжения на аккумуляторе myFile.print(","); myFile.print(PanelVoltage); // запись в файл напряжения на солнечной панели myFile.print(","); myFile.print(ChargingCurrent); // запись в файл силы тока заряда myFile.print(","); myFile.print(DisChargCurrent); // запись в файл силы тока разряда Serial.print(F("Battery Voltage: "));Serial.print(BattVoltage); Serial.println(F(" V.")); Serial.print(F("Solar Panell Voltage: "));Serial.print(PanelVoltage); Serial.println(F(" V.")); Serial.print(F("Charging Current: "));Serial.print(ChargingCurrent); Serial.println(F(" mA")); Serial.print(F("DisCharging Current: "));Serial.print(DisChargCurrent); Serial.println(F(" mA")); myFile.print(","); myFile.print(Temperature); // запись в файл Температуры myFile.print(","); myFile.println(Humidity); // запись в файл Влажности Serial.print(F("T=")); Serial.print(Temperature); Serial.print(F("C, RH=")); Serial.print(Humidity); Serial.println(F("%")); myFile.print(PressurePA); myFile.print(","); myFile.print(PressureMM); myFile.print(","); myFile.println(Lightlevel); Serial.print(F("PressurePA= ")); Serial.println(PressurePA); Serial.print(F("PressureMM= ")); Serial.println(PressureMM); Serial.print(F("Light level: ")); Serial.println(Lightlevel); Serial.println(F("done.")); Serial.println(F("")); myFile.close(); } else { // if the file didn't open, print an error: Serial.println(F("error opening log file!")); } } void SendData(){ client.publish("WStation/Battery", String(BattVoltage)); // отправляем в топик для аккумулятора client.publish("WStation/Solar", String(PanelVoltage)); // отправляем в топик напряжение солнечной панели client.publish("WStation/Charging", String(ChargingCurrent)); // отправляем в топик силу тока заряда client.publish("WStation/DisCharging", String(DisChargCurrent)); // отправляем в топик силу тока разряда sprintf(Buffer,"%02u.%02u.%02u", da, mo, yea); client.publish("WStation/Date", String(Buffer)); // отправляем в топик даты sprintf(Buffer,"%02u:%02u:%02u", hh, mm, ss); client.publish("WStation/Time", String(Buffer)); // отправляем в топик времени client.publish("WStation/Temperature", String(Temperature)); // отправляем в топик для термодатчика значение температуры client.publish("WStation/Humidity", String(Humidity)); // отправляем в топик для термодатчика значение влажности client.publish("WStation/PressurePA", String(PressurePA)); // отправляем в топик давление в паскалях client.publish("WStation/PressureMM", String(PressureMM)); // отправляем в топик давление в миллиметрах ртутного столбика client.publish("WStation/Lightlevel", String(Lightlevel)); // отправляем в топик уровень освещенности }
Грешу на строки: 231,232,233,234 выделил цветным.
если комментирую while(1); то вроде как все работает, но то начинает постоянно к wifi конектится то еще что-то.
если while(1); оставляем Wemos D1 постоянно ребутится.
Народ выручайте уже всё облазил куда смотреть? что поменять. Готов оплатить помощь.
Антон, что вам непонятно в сообщении
Could not find a valid BMP280 sensor, check wiring! ??
Прежде чем копать огромный код - разберитесь, почему у вас датчик BMP280 не отвечает. Отключите его от своей схемы, возьмите отдельную ардуину и запустите любой пример из библиотеки для этого датчика.
Еще можно запустить I2C сканер, некоторые BMP280 с Али имеют другой адрес
while(1) { yield(); ... ; }
По факту датчик BMP280 и не подключен, его пока что нет, а вы думаете, что именно из-за него происходит дальнейшая перезагрузка Wemos? Потому как если мы комментируем while(1) - то код продолжает работать дальше, но как попало. То есть Вы пологаете , что ошибка Soft WDT Reset идет оттуда?
То есть простыми словами пишем после стройки
while(1);
{
yield();
}
Правильно? Или я что-то с кавычками намудрил?
Кабздец! Ты это серьезно говоришь? То есть датчика нет? А как же оно "работает" тогда без него? )))
Все правильно отрабатывает: Если нет связи с датчиком, то уходим в глубокий луп.
Антон, признайтесь, вы в коде вообще ни буквы не понимаете? Этот код специально написан так, чтобы он зависал при отсутствии датчика - вы что, этого не видите?
Кабздец! Ты это серьезно говоришь?
да уж... И этот человек год на форуме...
Я вижу все и понимаю, вы хотите сказать, что цикл while(1); убивает wemos и он идет в WDT?
Я вижу все и понимаю, вы хотите сказать, что цикл while(1); убивает wemos и он идет в WDT?
если вы не будете строить из себя знатока - будет лучше.
Сам ваш вопрос говорит о том, что вы ни черта не понимаете.
while(1); - это бесконечный цикл, он завешивает любой МК, а не только вемос. Вы можете вставить в этот цикл yield();, как посоветовал садман41, но в практическом плане это бессмыслено. так как вемос все равно будет крутится в этом цикле бесконечно. Вы можете удалить этот while(1) вовсе, но это тоже не поможет, так как код не предназначен для работы без датчика давления.
Короче. заканчивайте тупить, либо добавляйте датчик, либо правьте код. чтобы удалить обращение к BMP вовсе.
while(1);
{
yield();
}
Правильно? Или я что-то с кавычками намудрил?
Неправильно. Точка с запятой лишняя.
Думаешь, он угадает, какая из двух?
Ну, со второй попытки угадает.
Думаешь, он угадает, какая из двух?
ты что? в него не веришь?
Я вижу все и понимаю
нет, придет с вопросом "удалил точку с запятой, теперь компилятор ругается...."
ты что? в него не веришь?
Я вижу все и понимаю
Неа.
Все вы конечно крутые профи! Наверное ошибок не делали не разу, и наверно трудно вспомнить себя таким же неучами. Все что написал написал сам! Да помогали люди, возможно не во всем понимаю. И кстати тут не разбор полетов вроде бы, а я конкретно помощи в решении вопроса попросил. Сейчас датчик купил, встал вопрос (его не видит Wemos D1 Mini Pro), есть много разных поверий типо сменить адрес в библиотеке, припять резисторы, подтянуть к питанию 3.3В. Но нигде нет конкретного решения вопроса. Как он подключается понятно, но нужно ли паять резисторы и тд. есть 2 датчика сканер I2C не находит адрес.
А как вы его подключаете? Что еще подключено к ESP?
Я собираю свою погодную станцию. Датчик только один пока что BMP280 он таки и не заводится Все остальное работает, что подкл. долго описывать.
сканер I2C не находит адрес.
пока сканер не найдет датчик, продолжать нет смысла
Сейчас датчик купил, встал вопрос (его не видит Wemos D1 Mini Pro), есть много разных поверий типо сменить адрес в библиотеке, припять резисторы, подтянуть к питанию 3.3В. Но нигде нет конкретного решения вопроса.
слушайте, Антон, вы очень наивны, если считайте, что абсолютно на любую вашу проблему у кого-то есть готовое "конкретное решение вопроса". Чаше всего никакого решения нет, надо не ленится и читать форумы, документацию и пробовать все те способы, которые вы называете "повериями" - попробовать поменять адрес, подтянуть пины, припаять резисторы и много еще чего.
Если же вы будете сидеть и ждать, пока кто-то сообщит вам "конкретное решение" - вы ничего никогда не сделаете.
что подкл. долго описывать.
вы серьезно? А нахрена кому-то тратить время на то чтобы вам помогать, если вам даже схему свою описать лень? Идите тогда и разбирайтесь сами со своими проблемами.
Это прекрасно, что собираете погодную станцию.
Вы спрашиваете почему не работает датчик, а кто же знает, что у вас подключено и что может мешать получению информации с датчика.
Подключите датчик к чистой ESP (больше ничего не подключено, кроме одного датчика), сделайте подтяжку I2C линий к VCC, и загрузите I2C сканер.
Если не увидит ESP датчик - будет что обсуждать.
Подключаете то SCL -> GPIO5 (D1) ; SDA -> GPIO4 (D2) ?
Подключите датчик к чистой ESP (больше ничего не подключено, кроме одного датчика), сделайте подтяжку I2C линий к VCC, и загрузите I2C сканер.
Если не увидит ESP датчик - будет что обсуждать.
Подключаете то SCL -> GPIO5 (D1) ; SDA -> GPIO4 (D2) ?
Это если он плату выбрал как LOLIN (WEMOS) D1 mini Pro, а то тут некоторые выбирают NodeMCU )))
На вемосе I2C работает - это точно.
Вопрос только в самом модуле BMP280 - он двух исполнений встречается (3.3V и 5М). Хотя, конечно, так и так работать должно - ESP8266 от 5V на входах не горит.
На вемосе I2C работает - это точно.
Вопрос только в самом модуле BMP280 - он двух исполнений встречается (3.3V и 5М). Хотя, конечно, так и так работать должно - ESP8266 от 5V на входах не горит.
у него адрес не определяется. тут или датчик или не та плата (не к тем пинам подключил) выбрана
Всем спасибо за помощь, с датчиком BMP280 похоже проблема либо он неисправен, подключения всех датчиков на плате погодной станции происходят по шине I2C, для этого на плате созданы и выведены отдельные колодки для подключения, все дорожки распаяны. Плату проектировал через EasyEDA все проверено и заранее все резисторы и тд. все что нужно подтянуто к своим питаниям и резисторам. К сожалению датчик BMP280 не сканировался сканером I2C. Почитал на этом форуме есть много постов, но ни один не решает проблему к сожалению. Также в библиотеке Adafruin_BMP280_Lib.... менял адреса: (0x77, 0x76, 0x56-0x58) и многие другие какие сумел отыскать гугл. Но безрезультатно. Попробовал датчик BMP180 проблем нет всё сразу же заработало. И сканер нашел сразу адрес. Делаю вывод, что AliExpress прислал отбраковку, я покупал 2шт, т.к. они даже небыли промаркированы. При подаче на них питания, все прозванивается нигде КЗ нет, заказал с трех магазинов разных еще 5 штук, буду ждать. Ниже немного фотографий погодной станции. Для того чтобы было немного понятно о чём тут вообще речь идет.
Схема созданная с помощью программы EasyEda и отправлена на заказ в китай JLCPCB.
Заказывал в двух вариантах черных и белых, распаял сразу 2 платы, с учетом если проект "ПОГОДНОЙ СТАНЦИИ" полностью воссоздам, то вторую плату подарю тестю. Так выглядит плата в чистом виде и с распаенными стабилизаторами напряжения один на 3.3в. другой на 5 вольт.
Ниже Плата с обратной стороны.
Плата в сборе но без датчиков. Уже в рабочем состоянии с залитым на нее скетчем.
В общем вот так в кратце о погодной станции, так же все те кто заинтересовался проектом, могу выслать платы, либо уже с распаенными компонентами.
кто заинтересовался проектом, могу выслать платы, либо уже с распаенными компонентами.
думаю не стоит... если вы разбираетесь в схемах так же, как в коде...
кстати если BMP-280 3.3 вольта питать от 5 он даёт дуба, у меня было именно так
Вы имеете ввиду, что я по вашим меркам не "вырос" ещё.
кстати если BMP-280 3.3 вольта питать от 5 он даёт дуба, у меня было именно так
Это в принципе очевидно, датчик исполняется в 2х вариантах.
Возможно кто-то разбирается в конвертах уровней, и тд. Есть небольшое понимание одной задумки, хотел сделать но пока что не получается, возможно знаний маловато даёт Джереми Блюм))). В общем хочу сделать так, чтобы при записи данных на SD мигал мой светодиод например зеленого цвета, т.е. простыми словами как на сетевой карте идёт передача данных и диод моргает + если нет карты диоды не горят если карта вставлена (т.е. определилась скетчем) загорается оранжевый. Т.е. воссоздать принцип работы как у сетевой карты. чтоб было видно идут ли данные или нет, т.к на карте собираются данные о погоде и тд. после чего можно составить диаграмму и тд. Есть у кго соображения как это можно сделать? пока пробую но ничего не выходит.
Вы имеете ввиду, что я по вашим меркам не "вырос" ещё.
в принципе да. Ветка показала, что в коде вы ни в зуб ногой. При таком раскладе не стоит кому-то рекомендовать свои поделки, пока сами четко не разберетесь. как оно работает.
Хотя... половина DIY в инете собрано на таком же уровне... один незнайка сделал, другоие повторяют...
Есть у кго соображения как это можно сделать? пока пробую но ничего не выходит.
а в чем проблема? Определили карту - зажгли оранжевый. Начали писать на карту - мигаем зеленым, перестали писать - не мигаем.
Вам код блинка помочь найти в инете? :)
а в чем проблема? Определили карту - зажгли оранжевый. Начали писать на карту - мигаем зеленым, перестали писать - не мигаем.
Вам код блинка помочь найти в инете? :)
Ну ты прям осчастливил меня знаток, ты прям я смотрю мастак комментировать.
А что если у тебя все пины заняты уже и некуда питалово выводить, что делать будешь умник?
В данном же случае у меня стоит вопрос как через Wemos обраться к пинам Data Logger Shield, там есть свободный pin и подать туда питание 3.3в чтоб зажечь диод отдельно припаянный к этому пину?
Посмотрел ваше решение погодной станции. А нужно ли все собирать в одном месте, при стоимости ESP в 300 рублей? Вот зачем SD карта на устройстве подключающемся к Интернет? Не лень вам ее будет вытаскивать и читать ее где-то, если можно посмотреть логи или данные из базы, например на интеграторе (у меня ОпенХАБ), через обычный браузер из любой точки планеты? Но это ИМХО.
У меня к дому штук 20 ESP подключается, и да, только на двух стоят I2C PCF расширители портов и I2C датчики температуры и влажности. Датчики добавил от делать нечего, так как была возможность.
А так в комнатах стоят NTP часы на 7-ми сегментных индикаторах, и заодно передают температуру и влажность на OpenHAB. Часы не показывают температуру и влажность в комнате, показывают уличную температуру, но передают, можно потом графики посмотреть, если захочется.
В сети уже лет пять ходит утверждение, что что бы ты не собирал на ESP8266, так и ли иначе это решение стремится стать погодной станцией.
A если отключили интернет тогда что куда будешь отправлять данные в небо?
Если что что-то можешь и хочешь сделать пусть это будет свое, всегда роднее.
Помещать систему хранения данных в агрессивную и опасную среду - идея не из лучших.
А что если у тебя все пины заняты уже и некуда питалово выводить, что делать ... ?
Использовать либо I2C-расширители портов (например, всем известная PCF8574 и подобные), либо сдвиговый регистр (например, 74HC595 и подобные), либо все вместе. Причем "натыкать" их можно ооочень много, датчиков всех и светодиодов не хватит, чтобы их все занять )))))
Поддержу #34 - Если есть подключение к сети, то почему бы этим не воспользоваться и отвязаться от SD-карт?
Как программно в скетче написать чтоб wemos d1 подал питание на пин A0 другого модуля, например на DATA LOGGER SHIELD'e?
Как-то вот это вот утверждение:
Я вижу все и понимаю
С вот этим не вяжется:
Как программно в скетче написать чтоб wemos d1 подал питание на пин A0 другого модуля, например на DATA LOGGER SHIELD'e?
Дак они есть у меня вы на фото надеюсь видели MCP23017, вопрос как сделать так чтоб wemos D1 подать на определенный pin mcp23017 питаниe как это программно осуществить?
Дак они есть у меня вы на фото надеюсь видели MCP23017, вопрос как сделать так чтоб wemos D1 подать на определенный pin mcp23017 питаниe как это программно осуществить?
Так в приведенном Вами же коде все это есть ))) Неужели высказывание:
Я вижу все и понимаю
Все-таки ложное?
Подсказка: Смотри строку 172 )))
Так в приведенном Вами же коде все это есть
тут стоит поправить - "в спижженом им где-то коде"...
Что, у кого-то есть еще сомнения. что "всегда лучше собрать свое"? :)
Автор. так что в приведенном проекте твое? - есть хоть что-то? -код очевидно нет. Схема, скорее всего, тоже где-то списана, потому как если бы ты сам придумал использовать mcp 23017 - то знал бы и как на нем пином управлять...
Плата, скорее всего, тоже разведена не им - ну просто по аналогии, для развода платы нужно что-то понимать в схемах, а из темы ясно, что ТС - полный ноль.
Забавно, что человек еще и имеет наглость предлагать другим тиражировать свой проект...
Администратор тему я думаю можно закрыть. Потому как ответов на занные вопросы по существу. нет. Есть только мега умники и диванные эксперты делающие выводы с потолка.
Конкретно b707 вот этот умник на форуме не дал ни одного дельного совета за все его 5 лет на форуме. Балаболка! сколько не читал коменты везде обсирает людей. Блокировать таких пользователей нужно.
Помещать систему хранения данных в агрессивную и опасную среду - идея не из лучших.
в смысле...тяжело плыть в серной кислоте?
Конкретно b707 вот этот умник на форуме не дал ни одного дельного совета за все его 5 лет на форуме.
ты мало того что тупень, так еще и память у тебя короткая. Конкретно тебе я дал дельные советы в сообщениях #1 #9 #19
Но таким как ты не советы нужны, а "конкретные решения" - то бишь, читай, чтобы кто-то писал код за тебя. Сам ты думать не умеешь. Для таких у меня и правда нет никакого сочуствия и помощи, таких я высмеиваю и троллю.
Ветку закрываешь - и правильно. Смысла в ней - ноль. Сам ты - пустое место, помочь тебе нельзя, а делать за тебя твой проект никто не будет.
Блокировать таких пользователей нужно.
не всё так однозначно, он увеличивает индекс сайта в поисковых системах )))
Конкретно b707 вот этот умник ...сколько не читал коменты везде обсирает людей.
а что остается, если 80% новичков ничего другого не заслуживают? к оставшимся 20% я отношусь с уважением. Но уважение не дается просто так, его надо заслужить.
И RTC там "очень нужен". ;-). Время из сети не получить же :-)
У меня RTC на часах с большим индикатором в коридоре стоит. Часы на ESP.
Если есть NTP время - мигают две точки, работают с RTC - одна. Видел одну точку только при включении питания, секунд пять, пока время не получат по NTP.
Если есть NTP время - мигают две точки, работают с RTC - одна. Видел одну точку только при включении питания, секунд пять, пока время не получат по NTP.
а как часто обновляешь по NTP? прям каждую секунду, раз у тебя ВСЕГДА две точки мигают?
делал свои часы - ставил обновление с сети раз в 4 часа, между обновлениями обычный миллис
а как часто обновляешь по NTP? прям каждую секунду, раз у тебя две точки мигают?
делал свои часы - ставил обновление с сети раз в 4 часа, между обновлениями обычный миллис
Конечно не каждую секунду.
Когда часы делал, поставил каждую минуту. Причем дома часов 5 штук, и каждые лезут на NTP сервер за обновлением каждую минуту. Думал заблокируют из за частых обновлений, но нет, все работает без каких либо проблем. А между обновлениями по тикеру инкрементирую секунды. Из тикера и точки мигают.
Если 10 мин нет ответов от NTP сервера, начинают мигать одной точкой. Значения из тикера. Проверял по тикеру точность хода вполне. Если нет NTP и время различается с RTC - время корректируется по RTC.
На малине поднят NTP сервер, нужно на него перевести домашние часы.