ESP, IoT [MatrixClock] Большие часы 64х32, ESP32

ASM

★★★★✩✩✩
26 Окт 2018
1,514
294
РЕЛИЗ 2 в разработке с 16.04.23

  • переход на GyverHub​
  • обновление интерфейса​
  • замена библиотек датчиков​
  • обновление интерфейса вывода информации на дисплее​
  • оптимизация кода вывода показаний с датчиков​

 
Изменено:

ASM

★★★★✩✩✩
26 Окт 2018
1,514
294
@kym13, в планах 6*0.4 и 10*0.5, жилки хоть цветные) первую оболочку можно снять.
 

kym13

★★✩✩✩✩✩
14 Ноя 2020
444
67
@ASM, .... в планах 6*0.4 и 10*0.5, .... Если планируете часы далеко от розетки ставить тогда да, а если метра 3 то это перебор. Проще тогда взять мягкий 2*0,75

@ASM, Мы не поняли друг друга, я про питание, Вы про соединение модулей.:). Я модуля соединял UTP кабелем.
 

ASM

★★★★✩✩✩
26 Окт 2018
1,514
294
@kym13, utp мне не нравится, изоляция плывет при пайке, да и там всего 8 цветов)

печаль, только 8*0.5, взял 2м)

Припаял проводки, норм получилось))

Даже работает))
Теперь можно и с датчиками заняться...
 

Вложения

Изменено:
  • Лойс +1
Реакции: kym13

kym13

★★✩✩✩✩✩
14 Ноя 2020
444
67
@ASM, Смотрю на этих проводах тоже плывет изоляция при пайке.
 

ASM

★★★★✩✩✩
26 Окт 2018
1,514
294
@kym13, да тут непонятно, плывет там, где перегрел огнем) сильный огонь был) пробовал паяльником зачистить, не получилось) потом можно термоклеем залить)

Я грел огнем и сдирал ногтем, где хорошо вышло, а где только растянулось. Повторная операция приводит вот к таким соплям при нагреве паяльником) искал зачистку для таких проводов, китайские от 0,5. Только-только... Вот найти бы что удачное для зачистки проводков для пайки)
 
Изменено:

ASM

★★★★✩✩✩
26 Окт 2018
1,514
294
Новая загадка:)
Этот код работает исправно...
C++:
#include <Wire.h>
#include <Adafruit_BMP280.h>
Adafruit_BMP280 bmp;

void setup() {
Serial.begin(115200);
bmp.begin(0x76);
}

void loop() {
int temp = bmp.readTemperature();
int pres = bmp.readPressure() * 0.0075;
Serial.print(temp);Serial.print(" | ");Serial.println(pres);
delay(1000);
}
но стоит его перенести в проект, то выдает чушь)
Код:
179 | -48
также почему-то сбоит матрица))
3 строки не горят, одна горит и т.д.
может стоит поиграться в сэмплах?)
C++:
  /* Default settings from datasheet. */
  bmp.setSampling(Adafruit_BMP280::MODE_NORMAL,     /* Operating Mode. */
                  Adafruit_BMP280::SAMPLING_X2,     /* Temp. oversampling */
                  Adafruit_BMP280::SAMPLING_X16,    /* Pressure oversampling */
                  Adafruit_BMP280::FILTER_X16,      /* Filtering. */
                  Adafruit_BMP280::STANDBY_MS_500); /* Standby time. */
или идет конфликт с матрицей) SDA/SCL = D2/D1, эти пины использует также матрица)
 

bort707

★★★★★★✩
21 Сен 2020
2,894
860
SDA/SCL = D2/D1, эти пины использует также матрица)
Если матрица использует те же пины, как и I2c - ни то ни другое нормально работать не будет. Обмен данных по пинам матрицы слишком интернсивный. чтобы эти пины можно было использовать для чего-то другого.
Поскольку I2C перенести нельзя, придется переносить сигналы матрицы в библиотеке на другие пины
 
Изменено:
  • Лойс +1
Реакции: ASM

ASM

★★★★✩✩✩
26 Окт 2018
1,514
294
@bort707, RX/TX тогда более свободные)
Поскольку I2C перенести нельзя
а такой вариант?)
C++:
Wire.begin(esda, escl);
заменил на RX/TX матрица работает, а вот датчик не знаю, в мониторе непонятно что пишет, дублируя по многу раз и все в одну строку)
xxx⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮xxx⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮xxxx⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮
 
Изменено:

bort707

★★★★★★✩
21 Сен 2020
2,894
860
заменил на RX/TX матрица работает, а вот датчик не знаю, в мониторе непонятно что пишет, дублируя по многу раз и все в одну строку)
А чего вы ждали? Вы же датчик к RX Tx подключили - а значит теперь у вас Монитор не работает, он же висит на тех же пинах...
 

ASM

★★★★✩✩✩
26 Окт 2018
1,514
294
@bort707, я матрицу перенес на эти пины, тогда переносить на другую сторону, там последняя пара осталась)

@bort707, перенес на пины 9 и 10, итог wdt reset)) видно нельзя просто так взять и перенести)

C++:
// HW SPI PINS из библиотеки
#define SPI_BUS_CLK 14
#define SPI_BUS_MOSI 13
#define SPI_BUS_MISO 12
#define SPI_BUS_SS 4
можно попробовать заменить SPI_BUS_SS
можно попробовать заменить SPI_BUS_SS
тоже wdt reset
C++:
Wire.begin(10, 9);
bmp.begin(0x76);
тоже wdt reset, хотел повесить принудительно датчик на пины 10 и 9
если чисто
C++:
Wire.begin(10, 9);
//или
bmp.begin(0x76);
то выводит огромное число 2147483647
 
Изменено:

ASM

★★★★✩✩✩
26 Окт 2018
1,514
294
а вот такой вариант написания возвращает нули
C++:
#include <Wire.h>
#include <Adafruit_BMP280.h>
//Adafruit_BMP280 bmp;
Adafruit_BMP280 bmp(0x76);

void setup() {
Serial.begin(115200);
//Wire.begin(10, 9);
//bmp.begin(0x76);
bmp.begin(10, 9);
}

void loop() {
int temp = bmp.readTemperature();
int pres = bmp.readPressure() * 0.0075;
Serial.print(temp);Serial.print(" | ");Serial.println(pres);
delay(5000);
}
В связи с невозможностью подключения датчика bmp280 есть два решения:
1. интеграция Open Weather.
2. закупать esp32, с надеждой, что на ней заработает этот датчик...
 
Изменено:

ASM

★★★★✩✩✩
26 Окт 2018
1,514
294
Нужна помощь) Есть ответ в виде json.
JSON:
{
  "coord": {
    "lon": -122.08,
    "lat": 37.39
  },
  "weather": [
    {
      "id": 800,
      "main": "Clear",
      "description": "clear sky",
      "icon": "01d"
    }
  ],
  "base": "stations",
  "main": {
    "temp": 282.55,
    "feels_like": 281.86,
    "temp_min": 280.37,
    "temp_max": 284.26,
    "pressure": 1023,
    "humidity": 100
  },
  "visibility": 10000,
  "wind": {
    "speed": 1.5,
    "deg": 350
  },
  "clouds": {
    "all": 1
  },
  "dt": 1560350645,
  "sys": {
    "type": 1,
    "id": 5122,
    "message": 0.0139,
    "country": "US",
    "sunrise": 1560343627,
    "sunset": 1560396563
  },
  "timezone": -25200,
  "id": 420006353,
  "name": "Mountain View",
  "cod": 200
  }
Код чтения написал такой)
C++:
void OWM() {
  http.begin(client, "http://api.openweathermap.org/data/2.5/weather?q=City&appid=Key");
  http.GET();
  Serial.println(http.getString());
  DynamicJsonDocument doc(500);
  DeserializationError error = deserializeJson(doc, http.getStream());
  if (error) {
    Serial.print(F("deserializeJson() failed: "));
    Serial.println(error.c_str());
    return;
  }
  Serial.println(doc["main"]["temp"].as<String>());
  Serial.println(doc["main"]["pressure"].as<String>());

  client.stop();
  http.end();
}
В мониторе вижу правильную строку json и
deserializeJson() failed: EmptyInput
почему-то не разбирается) хотя пример с
C++:
 http.begin(client, "http://arduinojson.org/example.json");
  http.GET();
  Serial.println(http.getString());
  DynamicJsonDocument doc(200);
  DeserializationError error = deserializeJson(doc, http.getStream());
  if (error) {
    Serial.print(F("deserializeJson() failed: "));
    Serial.println(error.f_str());
    return;
  }
  Serial.println(doc["time"].as<String>());
  Serial.println(doc["sensor"].as<String>());
  client.stop();
  http.end();
разбирается правильно)
 
Изменено:

ASM

★★★★✩✩✩
26 Окт 2018
1,514
294
@Старик Похабыч,я и в 2000 выставлял, не помогало...
кажется я наладил код... Теперь ругается на память)
сейчас проверю))

да, работает))
C++:
  http.begin(client, "");
  http.GET();
  String json = http.getString();
  DynamicJsonDocument doc(2000);
  DeserializationError error = deserializeJson(doc, json);
  Serial.println(doc["main"]["temp"].as<String>());
  Serial.println(doc["main"]["pressure"].as<String>());
вот так работает) в запросе много интересных параметров, которые можно вынести на экран дисплея, например состояние погоды)
Яндекс API использовать не буду, прогноз у них часто не сходится с текущей, этот сервис еще не тестил...
на этом давление 1001, в переводе на наши 750, датчик кажет 743, Яндекс 745, мда...

код получился максимально простой, в отличии от аналогов в интернете, которые замудрены серверами, клиентами, обрезками заголовков и т.д.)
 
Изменено:

bort707

★★★★★★✩
21 Сен 2020
2,894
860
вот так работает)
поняли почему теперь работает, а раньше нет?

В прошлый раз вы пытались получить ответ от сервера дважды - сначала для печати в Сериал, а потом для разбора. А так это не работает, потому что ответ можно получить только один раз.
Сейчас вы получаете ответ один раз, кладете его в переменную - а уже там обрабатываете и оттуда же печатаете.
Это правильно
 

ASM

★★★★✩✩✩
26 Окт 2018
1,514
294
@bort707, что-то ты путаешь) почему нельзя?) Можно и в сериал и в разбор. Это я для наглядности убрал лишнее) GET запрос один.
Строка в переменной http. Но ее саму использовать не разрешает, записал в посредника, всё заработало. Постоянно, чтобы что-то заработало, нужны посредники. Уже ни раз такое))
 
Изменено:

bort707

★★★★★★✩
21 Сен 2020
2,894
860
Строка в переменной http. Но ее саму использовать не разрешает, записал в посредника, всё заработало. Постоянно, чтобы что-то заработало, нужны посредники. Уже ни раз такое))
проверить очень легко.
Запусти вот таклй код и посмотри, выдаст ли два раза одну и ту же строку или нет
C++:
http.begin(client, "http://arduinojson.org/example.json");
  http.GET();
  Serial.println(" ====== Line 1 ======  ");
  Serial.println(http.getString());
  delay(10);
  Serial.println(" ====== Line 2 ======  ");
  Serial.println(http.getString());
 

ASM

★★★★✩✩✩
26 Окт 2018
1,514
294
@bort707, вот)bortg.JPG
перенес в общую прошивку, все работает) только показания мне не нравятся, блин...
надо приобретать esp32))
 
Изменено:

maksland

★★★✩✩✩✩
13 Янв 2019
462
105
Omsk
давно пора на esp32 переходить и закачивать проект (и перенести наработки в "Большие часы на WS2812, ESP8266, Народный мониторинг ")
датчиками надо своими пользоваться а не подтягивать из сети
а то все телефонами тычут что типа у нас такая температура а у тебя врут термометры :)
 

13O13A

✩✩✩✩✩✩✩
15 Фев 2021
5
0
Я про то, что на wrower есть встроенная флешпамять(pSRAM).