Contr1 ControllerSetting1 ESP8266WifiSettingsRoot1 0@0 LibraryRoot LibraryGroup-Оформление LibraryGroup-Базовые элементы LibraryGroup-Триггеры LibraryGroup-Таймеры LibraryGroup-UART 0@-399 330 -140@-350 169 284 0@-84 root input globalVariable 2 42b07470-926e-46b7-99b1-6e412ad96112 LibraryGroup-OLED дисплей LibraryGroup-OLED для ESP8266 0@-315 1 5 Подключение к сети WiFi с помощью WiFi Manager 170@40 170@40 corner: 335.0d@120 WiFiManager WiFiManager en 23914357-9274-477e-a4fb-960fa228a656 de2fb2a6-cf7b-4ffd-b42b-64d890603106 WiFiManager ResetSettinges d2ade5b8-f459-414d-8389-a368e1a74239 1292cc64-252b-4fe1-9634-ac08d8034d0e SSIDStr 0bfe99b8-e35b-4eca-91f2-1d159d87e591 5a45d68a-3b6c-421e-8956-4332369be552 PasswStr 9c8140cd-97b4-4f62-9c0d-330714a09b9d 03f52ed5-6e90-48ed-9b0b-6da7ce8cda07 e455dd5a-23d0-499a-9a6d-2fc0ba2aed38 WiFiManager Этот блок базовый, все остальные применять вставляя в проект вместе с этим блоком. freg - период в микросекундах для вызова ScanDMD. Если больше 5000 (5 мс), можете видеть мерцание. 183 wide 3 Кол-во панелей по ширине d02e355b-ebce-465c-ac09-827a5f1ff76c 28981250-ca35-47ca-b80f-577f1cea6d29 higt 1 Кол-вопанелей по высоте a57e79ef-fa57-44e2-9486-d664bdd6f1a6 acd57f23-e1c5-418c-ab6a-060dc03f4fe2 freg 1000 a21ba692-e27e-4b6b-96c2-ae8c0583f116 7c21bebc-1336-4140-848a-a19914608512 Serial.begin(115200); WiFiManager wifiManager; wifiManager.autoConnect("AutoConnectAP"); SSIDStr = WiFi.SSID(); PasswStr = WiFi.psk(); 146 #include <DNSServer.h> #include <ESP8266WebServer.h> #include <WiFiManager.h> ssidStr [30]; char passwStr [30]; char dmd.scanDisplayBySPI(); 23 void ScanDMD a9b2f9ff-ae73-4e3a-a759-64afffdf5f6d if (ResetSettinges) wifiManager.resetSettings(); 48 Serial.begin(115200); WiFiManager wifiManager; wifiManager.autoConnect("AutoConnectAP"); //wifiManager.setAPStaticIPConfig(IPAddress(10,0,1,1), IPAddress(10,0,1,1), IPAddress(255,255,255,0)); SSIDStr = WiFi.SSID(); PasswStr = WiFi.psk(); 251 fd7d182b-ec32-4917-a880-ef8fbdcb982f WiFiManager if (en) { if (start) { start = false; WiFiManager wifiManager; wifiManager.autoConnect("AutoConnectAP"); //wifiManager.setAPStaticIPConfig(IPAddress(10,0,1,1), IPAddress(10,0,1,1), IPAddress(255,255,255,0)); SSIDStr = WiFi.SSID(); PasswStr = WiFi.psk(); } } else if (ResetSettinges) wifiManager.resetSettings(); 417 Serial.begin(115200); 24 #include <DNSServer.h> #include <ESP8266WebServer.h> #include <WiFiManager.h> ssidStr [30]; char passwStr [30]; char start = true; bool setIPAdr dbda5d35-f52a-43c5-bb66-05285c07c2e7 3b27fc88-6bf5-44c3-9c30-3e62b6ec6c90 aac4c7a4-aa58-46be-a876-02b8d4c9a8ec if (en) { if (start) { start = false; WiFiManager wifiManager; if (ResetSettinges) wifiManager.resetSettings(); wifiManager.autoConnect("AutoConnectAP"); if (setIPAdr) wifiManager.setAPStaticIPConfig(IPAddress(10,0,1,1), IPAddress(10,0,1,1), IPAddress(255,255,255,0)); SSIDStr = WiFi.SSID(); PasswStr = WiFi.psk(); } } 416 #include <DNSServer.h> #include <ESP8266WebServer.h> #include <WiFiManager.h> ssidStr [30]; char passwStr [30]; char start = true; bool IPStr f20b8f6b-8947-42fe-bef4-612e31493c4f b2798508-a6a4-4823-8ed0-089a9bf5d460 538e13f6-cc95-422c-a724-2e5be105a375 WiFiManager Входы: ResetSettinges - удаление сохраненных параметров сетей. setIPAdr - Установка своего IP адреса, по умолчанию(если не включена адрес-192.168.4.1), если включена 10.0.1.1 (в параметрах писать через запятую, так 10,0,1,1 Выходы: SSIDStr - Имя сети, куда подключен ЕСП. PasswStr - Пароль этой же сети. Параметры: SSID_ESP, Password_ESP - Имя и пароль точки доступа, который создается ЕСП при включении, по умолчанию - AutoConnectAP и password. Пароль Wi-Fi должен состоять из 8 до 63 ASCII-закодированных символов в диапазоне от 32 до 126 (десятичный), иначе доступ будет без пароля. Например, если 12345678 вход по этому паролю, если 1234567, то вход будет без пароля, тк количество символов меньше восьми. 713 SSID_ESP AutoConnectAP f438a708-7ceb-4183-93fd-664e62c382d9 237ea0a5-9124-42f7-a46a-972ca18b003b Password_ESP password 1eeeac6f-0e45-4bfe-ab04-110f1690e278 12345678 9b41aedf-dbe9-406b-b025-779936056dd9 timeout 180 26e77d67-4c17-4969-9d52-8a9756dc77ce 11dc377c-d010-4b6f-8460-30da06265ede ip_adress 10,0,1,1 8cee1848-3f01-47c1-92cc-5ff6faee7a6a 8b0db8cd-e69d-4e66-83c6-e17a6060192f if (en) { if (start) { start = false; WiFiManager wifiManager; if (ResetSettinges) {wifiManager.resetSettings(); delay(1000); ESP.reset(); delay(5000); } wifiManager.setAPCallback(configModeCallback); wifiManager.setTimeout(timeout); if (setIPAdr) wifiManager.setAPStaticIPConfig(IPAddress(ip_adress), IPAddress(ip_adress), IPAddress(255,255,255,0)); if ( !wifiManager.autoConnect(SSID_ESP, Password_ESP)) { Serial.println("failed to connect and hit timeout"); delay(3000); ESP.reset(); delay(5000); } Serial.println("connected...yeey :)"); ticker.detach(); digitalWrite(BUILTIN_LED, LOW); } IPStr = WiFi.localIP() SSIDStr = WiFi.SSID(); PasswStr = WiFi.psk(); } 889 Serial.begin(115200); pinMode(BUILTIN_LED, OUTPUT); ticker.attach(0.6, tick); 80 #include <DNSServer.h> #include <ESP8266WebServer.h> #include <WiFiManager.h> #include <Ticker.h> ticker ; Ticker ssidStr [30]; char passwStr [30]; char start = true; bool int state = digitalRead(BUILTIN_LED); // get the current state of GPIO1 pin digitalWrite(BUILTIN_LED, !state); 116 void tick Serial.println("Entered config mode"); Serial.println(WiFi.softAPIP()); //if you used auto generated SSID, print it Serial.println(myWiFiManager->getConfigPortalSSID()); //entered config mode, make led toggle faster ticker.attach(0.2, tick); void configModeCallback WiFiManager *myWiFiManager 295f64ea-66b0-4c3b-a778-2663f780b2b0 12345678 if (en) { if (start) { start = false; WiFiManager wifiManager; if (ResetSettinges) {wifiManager.resetSettings(); delay(1000); ESP.reset(); delay(5000); } wifiManager.setAPCallback(configModeCallback); wifiManager.setTimeout(timeout); if (setIPAdr) wifiManager.setAPStaticIPConfig(IPAddress(ip_adress), IPAddress(ip_adress), IPAddress(255,255,255,0)); if ( !wifiManager.autoConnect(SSID_ESP, Password_ESP)) { Serial.println("failed to connect and hit timeout"); delay(3000); ESP.reset(); delay(5000); } Serial.println("connected...yeey :)"); ticker.detach(); digitalWrite(BUILTIN_LED, LOW); } IPStr = WiFi.localIP().toString(); SSIDStr = WiFi.SSID(); PasswStr = WiFi.psk(); } 901 3 490@10 510@10 corner: 550@90 490@10 corner: 570@90 4 650@70 WLAN+IP Q 1 2 - 3 125.0d 71.0d Проигрывание радиостанций с помощью только ESP8266 по wi fi, без дополнительных плат! 13 620@290 640@290 corner: 764.0d@410 620@290 corner: 784.0d@410 646.5d@304.5d En 620@320 634@320 ESP_RADIO_onlinе_5.2 EN 583cb09d-a9c7-4119-8d90-ae6324e00899 02cb4dcb-1316-462f-a232-67875efbf524 ESP_RADIO_onlinе_1.2 ESP8266 RADIO ON 8389aad5-e0af-485a-9899-94cd2fd21899 fbdbd2db-8fae-48af-921c-4bea960effdc f2d97d12-ebdf-4f30-889d-ef3ea6a53ddf ESP8266 RADIO Проигрывание радиостанций с помощью только ESP8266 по wi fi, без дополнительных плат! Вход network - URL радиостанции, по умолчанию http: //jazz.streamr.ru/jazz-64.mp3 Папраметры: length_str - длина строки, принят 30. network - название точки доступа на ESP8266, я назвал esp_radio, можете поменять. При подключении ESP8266 к питанию создается точка доступа esp_radio, при подключении к нему открывается в веб браузере страница, в котором нужно поставить название вашей wi fi сети и пароль, ESP подключится к нему и заработает радио по умолчанию. Некоторые радиостанции: http://kpradio.hostingradio.ru:8000/ http://radio.horoshee.fm:8000/mp3 http://kpradio.hostingradio.ru:8000/russia.radiokp128.mp3 http://fomenkofm.hostingradio.ru:8002/fomenkoradio128.mp3 http://icecast.russkoeradio.cdnvideo.ru:8000/rr_m.mp3 http://music.myradio.ua/rep128.mp3 http://jazz.streamr.ru/jazz-128.mp3 http://87.110.219.34:8000/swhmp3 http://87.110.219.34:8000/plusmp3 http://91.90.255.111:80/MixFM_96 https://nashe1.hostingradio.ru:18000/nashe20-64.mp3 http://jazz.streamr.ru/jazz-64.mp3 1084 radiostation jazz.streamr.ru/jazz-64.mp3h 2d2ef667-20e6-4931-b1de-e514800489e2 322a8bbb-7673-49ef-aa15-16e7e13454fd if (ON) { if (newUrl) {newUrl = false; AUDIO_init(); } handleAudio(); } 104 system_update_cpu_freq(SYS_CPU_160MHZ); Serial.begin(115200); 68 #include <Arduino.h> *URL = radiostation; #include <ESP8266WiFi.h> #include "AudioFileSourceICYStream.h" #include "AudioFileSourceBuffer.h" #include "AudioGeneratorMP3.h" #include "AudioOutputI2SNoDAC.h" const char *mp3 ; AudioGeneratorMP3 *file ; AudioFileSourceICYStream *buff ; AudioFileSourceBuffer *out ; AudioOutputI2SNoDAC newUrl = true; bool const char *ptr = reinterpret_cast<const char *>(cbData); (void) isUnicode; char s1[32], s2[64]; strncpy_P(s1, type, sizeof(s1)); s1[sizeof(s1)-1]=0; strncpy_P(s2, string, sizeof(s2)); s2[sizeof(s2)-1]=0; Serial.printf("METADATA(%s) '%s' = '%s'\n", ptr, s1, s2); Serial.flush(); 295 void MDCallback void *cbData const char *type bool isUnicode const char *string const char *ptr = reinterpret_cast<const char *>(cbData); char s1[64]; strncpy_P(s1, string, sizeof(s1)); s1[sizeof(s1)-1]=0; Serial.printf("STATUS(%s) '%d' = '%s'\n", ptr, code, s1); Serial.flush(); 210 void StatusCallback void *cbData int code const char *string static int lastms = 0; if (mp3->isRunning()) { if (millis()-lastms > 1000) { lastms = millis(); Serial.printf("Running for %d ms...\n", lastms); Serial.flush(); } if (!mp3->loop()) mp3->stop(); } else { Serial.printf("MP3 done\n"); delay(1000); Serial.printf("Buffering restart"); ESP.restart(); } 344 void handleAudio file = new AudioFileSourceICYStream(URL); file->RegisterMetadataCB(MDCallback, (void*)"ICY"); buff = new AudioFileSourceBuffer(file, 4096); buff->RegisterStatusCB(StatusCallback, (void*)"buffer"); out = new AudioOutputI2SNoDAC(); mp3 = new AudioGeneratorMP3(); mp3->RegisterStatusCB(StatusCallback, (void*)"mp3"); mp3->begin(buff, out); 357 void AUDIO_init radiostation b8cb5e21-2cae-4448-8903-34b347244e35 6d831ec3-1bb3-48bd-b5c2-2582ae017c49 c9ebc3ba-0b56-44e6-aa5b-2f592dbfbbb3 ESP8266 радио онлайн_1.2 Проигрывание радиостанций с помощью только ESP8266 по wi fi, без дополнительных плат! radiostation - URL радиостанции, по умолчанию http: //jazz.streamr.ru/jazz-64.mp3 Buff - буфер 2048, лучше 4096 или 8196, выбирать в зависимости от памяти ESP8266. Некоторые радиостанции(не проверены): http://kpradio.hostingradio.ru:8000/ http://radio.horoshee.fm:8000/mp3 http://kpradio.hostingradio.ru:8000/russia.radiokp128.mp3 http://fomenkofm.hostingradio.ru:8002/fomenkoradio128.mp3 http://icecast.russkoeradio.cdnvideo.ru:8000/rr_m.mp3 http://music.myradio.ua/rep128.mp3 http://jazz.streamr.ru/jazz-128.mp3 http://87.110.219.34:8000/swhmp3 http://87.110.219.34:8000/plusmp3 http://91.90.255.111:80/MixFM_96 https://nashe1.hostingradio.ru:18000/nashe20-64.mp3 http://jazz.streamr.ru/jazz-64.mp3 803 Buff 2048 da5d8133-740a-42e7-85d4-8faa46a5da7a 5120 aa8d1ea8-4112-4431-96f1-294744687bd7 if (ON) { if (newUrl) { newUrl = false; radiostation.toCharArray(rs_str, radiostation.length()+1); URL=rs_str; file = new AudioFileSourceICYStream(URL); file->RegisterMetadataCB(MDCallback, (void*)"ICY"); buff = new AudioFileSourceBuffer(file, Buff); buff->RegisterStatusCB(StatusCallback, (void*)"buffer"); out = new AudioOutputI2SNoDAC(); mp3 = new AudioGeneratorMP3(); mp3->RegisterStatusCB(StatusCallback, (void*)"mp3"); mp3->begin(buff, out); } handleAudio(); } 540 system_update_cpu_freq(SYS_CPU_160MHZ); //Serial.begin(115200); 70 #include <Arduino.h> #include <ESP8266WiFi.h> #include "AudioFileSourceICYStream.h" #include "AudioFileSourceBuffer.h" #include "AudioGeneratorMP3.h" #include "AudioOutputI2SNoDAC.h" *mp3 ; AudioGeneratorMP3 *file ; AudioFileSourceICYStream *buff ; AudioFileSourceBuffer *out ; AudioOutputI2SNoDAC *URL = ""; const char newUrl = true; bool rs_str [60]; char const char *ptr = reinterpret_cast<const char *>(cbData); (void) isUnicode; // Punt this ball for now // Note that the type and string may be in PROGMEM, so copy them to RAM for printf char s1[32], s2[64]; strncpy_P(s1, type, sizeof(s1)); s1[sizeof(s1)-1]=0; strncpy_P(s2, string, sizeof(s2)); s2[sizeof(s2)-1]=0; Serial.printf("METADATA(%s) '%s' = '%s'\n", ptr, s1, s2); Serial.flush(); 406 const char *ptr = reinterpret_cast<const char *>(cbData); // Note that the string may be in PROGMEM, so copy it to RAM for printf char s1[64]; strncpy_P(s1, string, sizeof(s1)); s1[sizeof(s1)-1]=0; Serial.printf("STATUS(%s) '%d' = '%s'\n", ptr, code, s1); Serial.flush(); 285 static int lastms = 0; if (mp3->isRunning()) { if (millis()-lastms > 1000) { lastms = millis(); Serial.printf("Running for %d ms...\n", lastms); Serial.flush(); } if (!mp3->loop()) mp3->stop(); } else { Serial.printf("MP3 done\n"); delay(1000); Serial.printf("Buffering restart"); ESP.restart(); } 348 file = new AudioFileSourceICYStream(URL); file->RegisterMetadataCB(MDCallback, (void*)"ICY"); buff = new AudioFileSourceBuffer(file, Buff); buff->RegisterStatusCB(StatusCallback, (void*)"buffer"); out = new AudioOutputI2SNoDAC(); mp3 = new AudioGeneratorMP3(); mp3->RegisterStatusCB(StatusCallback, (void*)"mp3"); mp3->begin(buff, out); 350 newUrl f4b8e8bb-1ad6-444f-9e89-b843626c648e 4d16261b-d172-4206-9aff-211fdf3bf018 df402981-0392-45e3-b0d0-c955bc066042 system_update_cpu_freq(SYS_CPU_160MHZ); //Serial.begin(115200); //newUrl= true; 85 #include <Arduino.h> #include <ESP8266WiFi.h> #include "AudioFileSourceICYStream.h" #include "AudioFileSourceBuffer.h" #include "AudioGeneratorMP3.h" #include "AudioOutputI2SNoDAC.h" *mp3 ; AudioGeneratorMP3 *file ; AudioFileSourceICYStream *buff ; AudioFileSourceBuffer *out ; AudioOutputI2SNoDAC *URL = ""; const char rs_str [60]; char ESP_RADIO_onlinе_1.4.1 Buff fc1de471-3bcb-49fc-a916-4bc82b7c5416 10c7d5a2-bb3f-42a1-a351-72272e17ec23 6b67b80c-ef1b-4323-9d5b-dc7f3b48b8ce ESP8266 радио онлайн_1.4.1 if (newUrl) { radiostation.toCharArray(rs_str, radiostation.length()+1); URL=rs_str; file = new AudioFileSourceICYStream(URL); file->RegisterMetadataCB(MDCallback, (void*)"ICY"); buff = new AudioFileSourceBuffer(file, Buff); buff->RegisterStatusCB(StatusCallback, (void*)"buffer"); out = new AudioOutputI2SNoDAC(); mp3 = new AudioGeneratorMP3(); mp3->RegisterStatusCB(StatusCallback, (void*)"mp3"); mp3->begin(buff, out); } handleAudio(); 523 system_update_cpu_freq(SYS_CPU_160MHZ); //Serial.begin(115200); static int lastms = 0; if (mp3->isRunning()) { if (millis()-lastms > 1000) { lastms = millis(); Serial.printf("Running for %d ms...\n", lastms); Serial.flush(); } if (!mp3->loop()) mp3->stop(); } else { Serial.printf("MP3 done\n"); delay(1000); Serial.printf("Buffering restart"); ESP.restart(); } d98ac68c-07f9-4f99-bb06-0507552287fd ESP8266 радио онлайн_5.2 if (EN) { if (newUrl) { out = NULL; if (mp3) { mp3->stop(); delete mp3; mp3 = NULL; } if (buff) { buff->close(); delete buff; buff = NULL; } if (file) { file->close(); delete file; file = NULL; } radiostation.toCharArray(rs_str, radiostation.length()+1); URL=rs_str; file = new AudioFileSourceICYStream(URL); file->RegisterMetadataCB(MDCallback, (void*)"ICY"); buff = new AudioFileSourceBuffer(file, Buff); buff->RegisterStatusCB(StatusCallback, (void*)"buffer"); out = new AudioOutputI2SNoDAC(); mp3 = new AudioGeneratorMP3(); mp3->RegisterStatusCB(StatusCallback, (void*)"mp3"); mp3->begin(buff, out); } handleAudio(); } 754 static int lastms = 0; if (mp3->isRunning()) { if (millis()-lastms > 1000) { lastms = millis(); Serial.printf("Running for %d ms...\n", lastms); Serial.flush(); } if (!mp3->loop()) mp3->stop(); } else { Serial.printf("MP3 done\n"); delay(1000); Serial.printf("Buffering restart"); ESP.restart(); } 342 620@310 corner: 634@330 11 6 270@310 290@310 corner: 370@350 270@310 corner: 390@350 296.5d@324.5d 10 140@290 160@290 corner: 240@350 140@290 corner: 260@350 182.5d@303.5d 8 40@310 60@310 corner: 76.0d@330 40@310 corner: 96.0d@330 96.0d@320 8.0d + GPIO-13 D7 172840762 82.0d@320 96.0d@320 corner: 96.0d@320 C+ 140@320 160@320 9 40@330 60@330 corner: 73.0d@350 40@330 corner: 93.0d@350 93.0d@340 5.0d - 12 GPIO-12 D6 33396438 79.0d@340 93.0d@340 corner: 93.0d@340 C - 140@340 160@340 260@340 twoInputs 0 V 10.0d 240@340 15 7 280@450 300@450 corner: 340@490 280@450 corner: 360@490 303.5d@463.5d 280@480 16 25 650@450 670@450 corner: 750@490 650@450 corner: 770@490 675.5d@464.5d 650@470 corner: 670@490 17 38 970@330 990@330 corner: 1030@450 970@330 corner: 1050@450 1001.5d@343.5d 29 820@40 840@40 corner: 920@80 820@40 corner: 940@80 845.5d@54.5d 720@60 740@60 corner: 795.0d@80 720@60 corner: 815.0d@80 744@73.5d 720@70 740@70 720@60 corner: 740@80 795.0d@60 corner: 815.0d@80 815.0d@70 7.0d 47.0d 0.0d 795.0d@70 40 1170@410 1190@410 corner: 1318.0d@590 1170@410 corner: 1338.0d@590 1195.0d@424.5d 18 27 1050@410 1070@410 corner: 1130@450 1050@410 corner: 1150@450 1089.0d@423.5d Q 9.0d 1030@440 1050@440 1050@440 corner: 1050@440 EN 1050@440 1070@440 1050@430 corner: 1070@450 1130@430 corner: 1150@450 1150@440 Q 1130@440 1150@440 corner: 1150@440 On_disp 1170@440 1190@440 OLED_ESP8266 1d48aae5-9c92-46f3-bfa0-6bab50f0c633 8c929a35-ea67-4c54-b987-c5df1e53da28 in_text1 7cc0a95f-2ecf-4243-8378-12f70db0e942 97bac96d-96f9-463d-8f2c-172e398c8ab9 in_text2 8fc7d50b-7761-4fdb-8f5d-5f7b44bca27c 5421d990-bacc-4afb-9b44-3a72af5e3a6f 597f7b61-dd30-4f52-959c-8d79fb7a4006 OLED дисплей для ESP8266 adr_disp 0x3c b0ddf809-0fc1-4c62-ab33-6ddbdec119fa e57209cb-a0d2-48e2-bfaa-2e9846f77554 pin_SDA 4 D2 (или если Gpio4 = 4) 7aff3882-fe41-46e7-8788-e802c5775189 0e038d65-a7d9-40f9-bf7f-c86e0b127d30 pin_SCK 14 D5 (или если Gpio14 = 14) 3aa387e0-73d6-48b6-993b-6345ca02472e 54dae8c3-aa77-4f2d-8305-a665612915ba User_text ESP8266 cd0371fc-574b-4195-8158-3b478a8f1aaa c5d7905a-7a6b-4762-8b2b-2e16089043cc text_font1 ArialMT_Plain_10 ArialMT_Plain_10, ArialMT_Plain_16, ArialMT_Plain_24 dd72f468-6093-4851-96c0-b92833b09547 42ab902c-e61d-493c-a055-5e00fa03ab56 x1 39e8d183-0a8e-4104-9559-432e73f52365 17491d47-b205-4f5b-808c-2a45946fe300 y1 da3167d1-0f80-407c-976d-ec36ed7f2164 8bcc010b-1f70-4504-88e4-9289fd34dd18 text_font2 ArialMT_Plain_10 4f83faca-e280-4e94-a71e-bd9c391f1d96 3dfea17f-caf3-41a6-8d6b-8d62bad1b9f4 x2 b2493791-f5d1-4bf9-b72d-f9a923fde982 9bdd6cce-8e7d-4e67-9a05-e395d460dc1d y2 a8030ef9-aeb5-43e6-ab1c-96ce3267161b ed66eda3-dc2d-4d04-ad0c-6e81800bb1d7 if (On_disp) {display.clear(); display.setFont(text_font1); display.drawString(x1, y1, in_text1); display.setFont(text_font2); display.drawString(x2, y2, in_text2); display.display(); } 217 display.init(); display.flipScreenVertically(); display.setContrast(255); display.setTextAlignment(TEXT_ALIGN_CENTER_BOTH); display.setFont(ArialMT_Plain_24); display.drawString(display.getWidth()/2, display.getHeight()/2, "User_text"); display.display(); delay (2000); 269 #include <Wire.h> не нужный дисплей комментировать: #include "SH1106.h" display (adr_disp, pin_SDA, pin_SCK); SH1106 #include "SSD1306.h" SSD1306Wire display(adr_disp, pin_SDA, pin_SCK); int i,k; String target; unsigned char n; char m[2] = { '0', '\0' }; k = source.length(); i = 0; while (i < k) { n = source[i]; i++; if (n >= 0xC0) { switch (n) { case 0xD0: { n = source[i]; i++; if (n == 0x81) { n = 0xA8; break; } if (n >= 0x90 && n <= 0xBF) n = n + 0x30; break; } case 0xD1: { n = source[i]; i++; if (n == 0x91) { n = 0xB8; break; } if (n >= 0x80 && n <= 0x8F) n = n + 0x70; break; } } } m[0] = n; target = target + String(m); } return target; 616 String utf8rus String source 1170@460 720@130 740@130 corner: 780@210 720@130 corner: 800@210 745.0d@143.5d 460@90 480@90 corner: 570.0d@170 460@90 corner: 590.0d@170 485.0d@104.0d 30@80 50@80 corner: 130@240 30@80 corner: 150@240 62.0d@94.0d CR 16.0d 130@110 150@110 150@130 Month 460@140 480@140 TIME=00:00 H c08cf066-92c1-4ba7-b3d7-fd0284c4c89d 65abe156-2a2c-4c1f-a95d-e11e81042fa1 M ee26aa08-61e9-4887-a50c-f6d5278a225d 72068c38-9f8d-40c7-9f2e-7d8f1548694a S 27f9842d-ac8c-4a65-9dd9-851707003fcc 6a0afe04-e57e-4384-b0d0-0a9d21ecc8f7 TIME 6e28c41e-0656-4e77-a99c-b156528ac448 d0d01355-2401-44bd-93bd-deb739dcb7fa 2abf7e9e-f694-4004-9a6f-0f6c6562894b Время с нулями time(); TIME = print(str(S/10),str(S%10)); 35 void time 6dde7e36-9450-47cc-8821-5ab1e338fd7c 150@140 corner: 150@150 Month 31.0d 130@150 150@150 Day 460@160 480@160 2848e85c-3af8-4ace-925d-cfb7e99ad9aa 150@160 corner: 150@170 Day 20.0d 130@170 150@170 460@170 480@170 corner: 554.0d@250 460@170 corner: 574.0d@250 489.0d@183.5d 460@190 corner: 480@210 Minute 34.0d 130@210 150@210 150@210 corner: 150@220 Minut 460@220 480@220 460@210 corner: 480@230 Second 37.0d 130@230 150@230 150@230 corner: 150@240 Second 460@240 480@240 90e05069-c111-4392-8e5e-a0ddb1d3f44d 460@230 corner: 480@250 720@200 740@200 574.0d@200 corner: 574.0d@240 27.0d 554.0d@240 574.0d@240 5eaa50ce-375d-4a63-a131-d07620f79fb4 554.0d@230 corner: 574.0d@250 460@200 T=00:00:00 Hour 900ee771-1ead-49c8-b686-854685790c78 Время строкой 00:00:00 Блок перевода времени в строку в формате 00:00:00 rw6cm 22.11.16 66 TIME = (String( Hour / 10 )) + (String( Hour % 10 )) + (String(":")) + (String( Minut / 10 )) + (String( Minut % 10)) + (String(":")) + (String( Second / 10)) + (String( Second % 10 )); 191 74.0d 480@200 150@190 corner: 150@200 Hour 24.0d 130@190 150@190 ru.pool.ntp.org 30 1800 Year 25.0d 130@130 150@120 corner: 150@130 Year 460@120 480@120 590.0d@160 Data 00.00.0000 DATA 6997e9b9-4adf-4844-93f6-6a0a07d917c1 Дата строкой 00.00.0000 Блок перевода даты в строку в формате 00:00:0000 Сделал aidar_i из блока rw6cm 22.11.16 90 DATA = (String( Day / 10 )) + (String( Day % 10 )) + (String(".")) + (String( Month / 10 )) + (String( Month % 10)) + (String(".")) + (String(( Year / 1000)%10))+ (String(( Year / 100 )%10))+ (String(( Year / 10 )%10))+ (String( Year % 10 )); 242 90.0d 30.0d 570.0d@160 590.0d@160 corner: 590.0d@160 720@160 740@160 720@150 corner: 740@170 720@180 740@180 710.0d@182.0d 720@170 corner: 740@190 720@190 corner: 740@210 780@190 corner: 800@210 800@200 780@200 820@170 840@170 corner: 920@210 820@170 corner: 940@210 845.5d@184.5d 820@190 corner: 840@210 970@380 990@380 950@200 corner: 950@380 Ch Str 920@200 940@200 920@190 corner: 940@210 820@200 Value 840@200 800@200 corner: 800@480 1170@480 1190@480 singl_name 57.0d 764.0d@400 784.0d@400 ESP8266_WiFi_Radio_izm1 ESP8266_WiFi_RADIO_1 Volume 8f4922e6-0057-4ebb-906c-37a0ffc05631 b57e0b99-4d41-47e2-9b12-ebdc99d487d6 ba51b723-7e15-4ae6-a90f-feaeb14d0e9e ESP8266 WiFi радио_1 if (En) {r_stop=true; if (newUrl || restartURL) { restartURL=false; delete mp3; delete buff; delete file; radiostation.toCharArray(rs_str, radiostation.length()+1); URL=rs_str; file = new AudioFileSourceICYStream(URL); buff = new AudioFileSourceBuffer(file, Buff); out = new AudioOutputI2SNoDAC(); out->SetGain((float)Volume); Serial.printf_P(PSTR("Set volume: %d\n"), volume); mp3 = new AudioGeneratorMP3(); mp3->begin(buff, out); printRun=true; } if (mp3->isRunning()) { if (!mp3->loop()) mp3->stop(); if (printRun ) { printRun=false; Serial.printf("Radio = play\n"); Serial.flush(); } } else { Serial.printf("MP3 done\n"); restartURL = true; } } else if (r_stop) { r_stop=false; Serial.printf("Radio = stop\n"); printRun=true; } 1018 #include <Arduino.h> #include <ESP8266WiFi.h> #include "AudioFileSourceICYStream.h" #include "AudioFileSourceBuffer.h" #include "AudioGeneratorMP3.h" #include "AudioOutputI2SNoDAC.h" *mp3 ; AudioGeneratorMP3 *file ; AudioFileSourceICYStream *buff ; AudioFileSourceBuffer *out ; AudioOutputI2SNoDAC *URL = ""; const char rs_str [60]; char restartURL =true; bool printRun =false; bool r_stop = false; bool ESP8266_WiFi_Radio_izm next_rs e2069a2f-0d57-48c3-a07c-4af8d9c3dbc9 ec1e3a0d-0d4a-4f41-bd7a-509fd8ec1616 c3c89ca6-6a68-476d-8367-7dd2e485fd30 ESP8266 WiFi Pадио_izm Проигрывание радиостанций с помощью только ESP8266 по wi fi, без дополнительных плат! radiostation - URL радиостанции newUrl - запуск установленной радиостанции, (импульсный сигнал) Buff - буфер 2048, лучше 4096 или 8196, выбирать в зависимости от памяти ESP8266. Volume - уровень сигнала с выхода RX Некоторые радиостанции (проверены, можно скопировать отсюда): http://icecast.russkoeradio.cdnvideo.ru:8000/rr_m.mp3 http://jazz.streamr.ru/jazz-64.mp3 http://stream0.radiostyle.ru:8000/rapicom http://nashe1.hostingradio.ru/rock-256 http://91.190.117.131:8000/live http://online.radiorecord.ru:8102/sd90_128 http://icecast.vgtrk.cdnvideo.ru/kulturafm_mp3_128kbps Цифры в конце URL (128kbps, 256) битрейт , ставьте не более 128, лучше еще меньше , чтобы не заикался. И уровень WiFi сети должна быть хорошей. 813 time 1000 250 039e50ce-87e6-4833-97ea-74c6042e5e57 2000 451739f7-8170-44db-bc23-391e41094018 if (En) {r_stop=true; if (newUrl || restartURL) { restartURL=false; next_rs=false; delete mp3; delete buff; delete file; radiostation.toCharArray(rs_str, radiostation.length()+1); URL=rs_str; file = new AudioFileSourceICYStream(URL); buff = new AudioFileSourceBuffer(file, Buff); out = new AudioOutputI2SNoDAC(); out->SetGain(((float)Volume)/100.0); Serial.printf_P(PSTR("Set Volume: %d\n"), Volume); mp3 = new AudioGeneratorMP3(); mp3->begin(buff, out); printRun=true; printRun1=true; } if (mp3->isRunning()) { if (!mp3->loop()) mp3->stop(); if (printRun ) { printRun=false; Serial.printf("Radio = play\n"); } } else { if (printRun1 ) { printRun1=false; Serial.printf("MP3 done\n"); } if (millis()-lastms > time) { lastms = millis(); next_rs= true; restartURL = true; } } } else if (r_stop) { r_stop=false; Serial.printf("Radio = stop\n"); printRun=true; } 1252 #include <Arduino.h> #include "AudioFileSourceICYStream.h" #include "AudioFileSourceBuffer.h" #include "AudioGeneratorMP3.h" #include "AudioOutputI2SNoDAC.h" *mp3 ; AudioGeneratorMP3 *file ; AudioFileSourceICYStream *buff ; AudioFileSourceBuffer *out ; AudioOutputI2SNoDAC *URL = ""; const char rs_str [60]; char restartURL =true; bool printRun =false; bool printRun1 =false; bool r_stop = false; bool lastms = 0; static int status_radio 517e1f77-84c4-47eb-981e-513050ece78b 11b3ac28-d0e1-4e61-9517-febaf9c4e202 295fb095-2437-4d0c-ac26-fd2871558b63 ESP8266 WiFi Pадио_izm1 Проигрывание радиостанций с помощью только ESP8266 по wi fi, без дополнительных плат! radiostation - URL радиостанции newUrl - запуск установленной радиостанции, (импульсный сигнал) Buff - буфер 2048, лучше 4096 или до 8196, выбирать в зависимости от памяти ESP8266. Volume - уровень сигнала с выхода RX Параметры: time - время через которое появится импульс на выходе next_rs при сбое или включении неработающей р/станции. Некоторые радиостанции (проверены, можно скопировать отсюда): http://icecast.russkoeradio.cdnvideo.ru:8000/rr_m.mp3 http://jazz.streamr.ru/jazz-64.mp3 http://stream0.radiostyle.ru:8000/rapicom http://nashe1.hostingradio.ru/rock-256 http://91.190.117.131:8000/live http://online.radiorecord.ru:8102/sd90_128 http://icecast.vgtrk.cdnvideo.ru/kulturafm_mp3_128kbps Цифры в конце URL (128kbps, 256) битрейт , ставьте не более 128, лучше еще меньше , чтобы не заикался. И уровень WiFi сети должна быть хорошей. 937 if (En) {r_stop=true; if (newUrl || restartURL) { restartURL=false; next_rs=false; delete mp3; delete buff; delete file; radiostation.toCharArray(rs_str, radiostation.length()+1); URL=rs_str; file = new AudioFileSourceICYStream(URL); buff = new AudioFileSourceBuffer(file, Buff); out = new AudioOutputI2SNoDAC(); out->SetGain(((float)Volume)/100.0); Serial.printf_P(PSTR("Set Volume: %d\n"), Volume); mp3 = new AudioGeneratorMP3(); mp3->begin(buff, out); printRun=true; printRun1=true; } if (mp3->isRunning()) { if (!mp3->loop()) mp3->stop(); if (printRun ) { printRun=false; Serial.printf("Radio = play\n"); status_radio = 1; } } else { if (printRun1 ) { printRun1=false; Serial.printf("MP3 done\n"); } if (millis()-lastms > time) { lastms = millis(); next_rs= true; restartURL = true; } } } else if (r_stop) { r_stop=false; Serial.printf("Radio = stop\n"); status_radio = 0; printRun=true; } 1265 6540ef35-f930-44e0-a72f-5a1ea09bb305 ac42743e-184c-42a3-85c8-89493bee1b12 17c1c10f-7b8b-4021-9cbc-647e5f4c8a22 if (En) {r_stop=true; if (newUrl || restartURL) { restartURL=false; next_rs=false; out = NULL; singl_name = ""; if (mp3) { mp3->stop(); delete mp3; mp3 = NULL; } if (buff) { buff->close(); delete buff; buff = NULL; } if (file) { file->close(); delete file; file = NULL; } radiostation.toCharArray(rs_str, radiostation.length()+1); URL=rs_str; file = new AudioFileSourceICYStream(URL); buff = new AudioFileSourceBuffer(file, Buff); out = new AudioOutputI2SNoDAC(); out->SetGain(((float)Volume)/100.0); Serial.printf_P(PSTR("Set Volume: %d\n"), Volume); mp3 = new AudioGeneratorMP3(); mp3->begin(buff, out); printRun=true; printRun1=true; } if (mp3->isRunning()) { if (!mp3->loop()) mp3->stop(); if (printRun ) { printRun=false; Serial.printf("Radio = play\n"); } status_radio = true; } else { if (printRun1 ) { printRun1=false; Serial.printf("MP3 done\n"); } if (millis()-lastms > time) { lastms = millis(); next_rs= true; restartURL = true; } } } else { status_radio = false; if (r_stop) { r_stop=false; Serial.printf("Radio = stop\n"); printRun=true; } } 1431 #include <Arduino.h> #include "AudioFileSourceICYStream.h" #include "AudioFileSourceBuffer.h" #include "AudioGeneratorMP3.h" #include "AudioOutputI2SNoDAC.h" *mp3 ; AudioGeneratorMP3 *file ; AudioFileSourceICYStream *buff ; AudioFileSourceBuffer *out ; AudioOutputI2SNoDAC *URL = ""; const char rs_str [60]; char restartURL =true; bool printRun =false; bool printRun1 =false; bool r_stop = false; bool lastms = 0; static int const char *ptr = reinterpret_cast<const char *>(cbData); (void) isUnicode; // Punt this ball for now // Note that the type and string may be in PROGMEM, so copy them to RAM for printf char s1[32], s2[64]; strncpy_P(s1, type, sizeof(s1)); s1[sizeof(s1)-1]=0; strncpy_P(s2, string, sizeof(s2)); s2[sizeof(s2)-1]=0; Serial.printf("METADATA(%s) '%s' = '%s'\n", ptr, s1, s2); Serial.flush(); if (String(s1)=="StreamTitle") { singl_name = s2; } 482 void MDCallback void *cbData const char *type bool isUnicode const char *string const char *ptr = reinterpret_cast<const char *>(cbData); // Note that the string may be in PROGMEM, so copy it to RAM for printf char s1[64]; strncpy_P(s1, string, sizeof(s1)); s1[sizeof(s1)-1]=0; Serial.printf("STATUS(%s) '%d' = '%s'\n", ptr, code, s1); Serial.flush(); void StatusCallback void *cbData int code const char *string 14 830@370 850@370 corner: 930@410 830@370 corner: 950@410 855.5d@384.5d 830@390 corner: 850@410 970@400 990@400 950@400 corner: 950@400 930@400 950@400 930@390 corner: 950@410 830@400 850@400 784.0d@400 corner: 784.0d@500 in_text3 1170@500 1190@500 OLED_ESP8266rus_1.1 2ff2e813-dc20-432b-aef2-2f13215238bf 646b536a-3742-4250-9d64-8a168c736fd0 in_text 809551ac-2d79-44a5-9c46-36ed74a8fd2c 2e1fe56b-371e-48be-9bd4-3228830da448 3abce5fb-68ff-46e5-9528-73a796960779 OLED дисплей для ESP8266RUS_1.1 Шрифты: Кириллица: ArialRus_Plain_10 ArialRus_Plain_14 ArialRus_Plain_16 ArialRus_Plain_24 ArialRus_Italic_10 ArialRus_Italic_16 ArialRus_Italic_24 Текст User_text1 и User_text2 появляется при запуске ЕСП. 209 text_alignment TEXT_ALIGN_CENTER 3c538900-e863-4da3-910d-80b4eedeb3e5 50e2a4be-d1d8-48f4-92cd-9c2973a3d86f 5 D1 (или если Gpio5 = 5) User_font ArialRus_Plain_24 9132cd45-67f7-41c2-a894-27535365376e 3e906080-5381-4fb7-b171-a7272f487143 User_text1 Текст1 User_text2 Текст2 353f109f-de0b-45d1-bf8b-ff3a241d46e2 a8c7431a-1e13-40b4-aa3b-b6bae0cce6c1 text_alignment1 TEXT_ALIGN_CENTER 7b708500-83ed-40e9-ad19-88eeb09e1e3f 24915f1e-8fac-4f56-9a32-3da5a2b7918a ArialRus_Plain_16 display.getWidth()/2 15 text_alignment2 TEXT_ALIGN_CENTER TEXT_ALIGN_LEFT, TEXT_ALIGN_CENTER, TEXT_ALIGN_RIGHT ea331abd-7d00-479d-82b8-a18a77f386f8 3ca3cf29-c4ea-4d12-acaa-d658de390232 ArialRus_Plain_16 max_width 128 60029a15-25f5-480a-82f0-98d05e6a8baf 409a6c04-a196-4dad-8879-5ce875b47bd5 display.getWidth()/2 40 text_font ArialRus_Italic_14 733ab3a8-087e-4a54-a257-c456f21a2dfa 04026be1-b4b0-480d-ac9f-be0f8d12ef5c if (On_disp) {display.clear(); display.setTextAlignment(text_alignment); display.setFont(text_font); display.drawString(x, y, utf8rus(in_text)); display.setTextAlignment(text_alignment1); display.setFont(text_font1); display.drawString(x1, y1, utf8rus(in_text1)); display.setTextAlignment(text_alignment2); display.setFont(text_font2); display.drawStringMaxWidth(x2, y2, max_width, utf8rus(in_text2)); display.display(); } 473 display.init(); display.flipScreenVertically(); display.setContrast(255); display.setTextAlignment(TEXT_ALIGN_CENTER); display.setFont(User_font); display.drawString(display.getWidth()/2, 15, utf8rus(User_text1)); display.drawString(display.getWidth()/2, 40, utf8rus(User_text2)); display.display(); delay (1000); 313 #include <Wire.h> не нужный дисплей комментировать: #include "SH1106.h" SH1106 display(adr_disp, pin_SDA, pin_SCK); #include "SSD1306.h" display (adr_disp, pin_SDA, pin_SCK); SSD1306Wire /* Recode russian fonts from UTF-8 to Windows-1251 */ int i,k; String target; unsigned char n; char m[2] = { '0', '\0' }; k = source.length(); i = 0; while (i < k) { n = source[i]; i++; if (n >= 0xC0) { switch (n) { case 0xD0: { n = source[i]; i++; if (n == 0x81) { n = 0xA8; break; } if (n >= 0x90 && n <= 0xBF) n = n + 0x30; break; } case 0xD1: { n = source[i]; i++; if (n == 0x91) { n = 0xB8; break; } if (n >= 0x80 && n <= 0x8F) n = n + 0x70; break; } } } m[0] = n; target = target + String(m); } return target; 673 String utf8rus String source x 4f34f82d-d3cd-4185-9797-6b27df596fd4 645f3185-16d0-4e7c-8b3e-9dfada951d65 y b18b1220-7b26-4b92-b554-27a1046aa964 c692aac5-fcf3-43c2-899a-50cd796ed01d 6c84d451-3f63-40e4-a7e2-45b09f0e2d4c 5cb35c06-f180-43e0-b35a-59cd0fceba25 Применять соместно с главным блоком и блоком OLED display. Отдельно не работает. Шрифты: Кириллица: ArialRus_Plain_10 ArialRus_Plain_14 ArialRus_Plain_16 ArialRus_Plain_24 ArialRus_Italic_10 ArialRus_Italic_16 ArialRus_Italic_24 DialogRus_Italic_10, ArialRus_Italic_14, ArialRus_Italic_26 text_alignment - положение текста на экране по горизонтали: TEXT_ALIGN_LEFT, TEXT_ALIGN_CENTER, TEXT_ALIGN_RIGHT 404 ArialRus_Italic_16 ESP8266 RADIO TEXT_ALIGN_RIGHT ArialRus_Italic_16 ArialRus_Italic_16 0 ArialRus_Italic_16 text_alignment3 TEXT_ALIGN_CENTER f457f789-1b3e-4351-ae27-f3d08dc1c2fd b6c717fb-c59e-4173-bb3c-b597db5bfbd4 text_font3 ArialRus_Italic_16 967722f4-ab09-478a-a1b6-02bc08db6a31 dda5b1d3-a4ff-403c-b64d-58d8adfb111f x3 64 4d582771-172e-4022-b0c6-8ed6ed577ffe ec422111-61c0-4c0f-a6d4-191b5aa2808e y3 dc9e9c3c-5d3b-4104-b41f-f1d17cb0eff8 d03938e3-6ec4-49e0-8fc6-711f0e1249d2 if (On_disp) {display.clear(); display.setTextAlignment(text_alignment); display.setFont(text_font); display.drawString(x, y, utf8rus(in_text)); display.setTextAlignment(text_alignment1); display.setFont(text_font1); display.drawString(x1, y1, utf8rus(in_text1)); display.setTextAlignment(text_alignment2); display.setFont(text_font2); display.drawString(x2, y2, utf8rus(in_text2)); display.setTextAlignment(text_alignment3); display.setFont(text_font3); display.drawString(x3, y3, utf8rus(in_text3)); display.display(); } 586 in_text4 1170@520 1190@520 OLED_ESP8266rus_1.2 in_text4 f536cda5-7c39-4855-a446-50b5406e1df1 20b2560b-b9e0-457c-a533-54271f9972ce 8140a8e9-a47d-47c4-a7db-5de8bc3494ea OLED дисплей для ESP8266RUS_1.2 Шрифты: Кириллица: ArialRus_Plain_10 ArialRus_Plain_14 ArialRus_Plain_16 ArialRus_Plain_24 ArialRus_Italic_10 ArialRus_Italic_16 ArialRus_Italic_24 DialogRus_Italic_10, ArialRus_Italic_14, ArialRus_Italic_26 text_alignment - положение текста на экране по горизонтали: TEXT_ALIGN_LEFT, TEXT_ALIGN_CENTER, TEXT_ALIGN_RIGHT 323 0 30 64 45 text_alignment4 TEXT_ALIGN_CENTER ab399ce8-ca99-469e-bdcf-adb22aab5b03 05a1e8b8-27d5-43f6-b511-d69fb5c27ec0 text_font4 ArialRus_Plain_10 8a5c1f8e-4ab5-47ad-b85e-fc05c6c48647 45e6bf98-2263-4545-a1b6-3ea99bfc2d9f x4 0 f0e109c0-ce1a-4249-89eb-570fcade74ff 094eeb55-0845-4138-9839-2369c51f0c7e y4 50 55 94a54520-43c6-4eec-aef3-376a4271407b 7a084e7d-1fbc-4d1e-823b-97ec9b959026 if (On_disp) {display.clear(); display.setTextAlignment(text_alignment); display.setFont(text_font); display.drawString(x, y, utf8rus(in_text)); display.setTextAlignment(text_alignment1); display.setFont(text_font1); display.drawString(x1, y1, utf8rus(in_text1)); display.setTextAlignment(text_alignment2); display.setFont(text_font2); display.drawString(x2, y2, utf8rus(in_text2)); display.setTextAlignment(text_alignment3); display.setFont(text_font3); display.drawString(x3, y3, utf8rus(in_text3)); display.setTextAlignment(text_alignment4); display.setFont(text_font4); display.drawString(x4, y4, utf8rus(in_text4)); display.display(); } 718 1170@540 1190@540 1170@560 1190@560 1155.0d@563.5d 1170@580 1190@580 1156.0d@583.5d 38d73d9f-9bbe-4936-8c00-cfaba347eaeb ESP8266 WiFi RADIO ArialRus_Plain_10 ArialRus_Plain_10 ArialRus_Plain_10 10 ArialRus_Plain_10 30 64 40 128.0d 1190@460 815.0d@70 corner: 815.0d@460 820@70 840@70 940@70 920@70 940@70 corner: 940@360 970@360 990@360 970@350 corner: 990@370 970@370 corner: 990@390 970@390 corner: 990@410 970@410 corner: 990@430 400@360 420@360 corner: 500@400 400@360 corner: 520@400 425.5d@374.5d 400@390 420@390 520@390 500@390 620@360 640@360 520@360 corner: 520@440 970@440 990@440 970@430 corner: 990@450 1030@430 corner: 1050@450 970@420 990@420 770@420 corner: 770@480 750@480 770@480 750@470 corner: 770@490 650@480 670@480 360@480 corner: 360@520 Q 340@480 360@480 dec I 300@480 260@340 corner: 260@480 Index 270@340 290@340 390@340 Radio http://nashe1.hostingradio.ru/nashe-128.mp3 http://icecast.vgtrk.cdnvideo.ru/kulturafm_mp3_128kbps http://jazz.streamr.ru/jazz-64.mp3 http://stream0.radiostyle.ru:8000/rapicom http://nashe1.hostingradio.ru/rock-256 http://ep128.hostingradio.ru:8030/ep128 Q 370@340 21 39 430@270 450@270 corner: 530@330 430@270 corner: 550@330 456.5d@283.5d send 430@300 444@300 430@320 9600 GPIO-3 D9 187700865 GPIO-1 D10 13382813 change D 450@320 390@320 corner: 390@540 620@340 640@340 620@330 corner: 640@350 620@350 corner: 640@370 4096 620@380 640@380 594.0d@383.5d 620@370 corner: 640@390 620@400 640@400 606.0d@403.5d 620@390 corner: 640@410 58.0d 764.0d@360 784.0d@360 764.0d@350 corner: 784.0d@370 35.0d 764.0d@380 784.0d@380 764.0d@370 corner: 784.0d@390 764.0d@390 corner: 784.0d@410 ESP8266_WiFi_RADIO 907a7a62-91e9-4fe4-a97c-982281e88732 ESP8266 WiFi РАДИО Проигрывание радиостанций с помощью только ESP8266 по wi fi, без дополнительных плат! Выход звука на пинах ESP8266 GND и TX. Можно напрямую подключить наушники. Звук только моно. Входы: En - вкл и выкл блока; radiostation - URL радиостанции; newUrl - запуск установленной радиостанции, (импульсный сигнал); Buff - буфер от 2048, я ставил 4096 , выбирать в зависимости от памяти ESP8266; Volume - уровень сигнала с выхода RX. Выходы: status_radio - состояние радио, если включено true, иначе - false; next_rs - появится импульс при сбое или включении неработающей р/станции. singl_name - вывод имени исполнителя и трека. Параметры: time - время через которое появится импульс на выходе next_rs при сбое или включении неработающей р/станции. Некоторые радиостанции (проверены, можно скопировать отсюда): http://icecast.russkoeradio.cdnvideo.ru:8000/rr_m.mp3 http://jazz.streamr.ru/jazz-64.mp3 http://stream0.radiostyle.ru:8000/rapicom http://nashe1.hostingradio.ru/rock-256 http://91.190.117.131:8000/live http://online.radiorecord.ru:8102/sd90_128 http://icecast.vgtrk.cdnvideo.ru/kulturafm_mp3_128kbps Цифры в конце URL (128kbps, 256) битрейт , ставьте URL не более 128, лучше еще меньше , если заикается часто. И уровень WiFi сети должна быть хорошей. Проверял URL с битрейт 320, у меня радио работало хорошо! aidar_i 03/2019 1339 if (En) {r_stop=true; if (newUrl || restartURL) { restartURL=false; next_rs=false; out = NULL; singl_name = ""; if (mp3) { mp3->stop(); delete mp3; mp3 = NULL; } if (buff) { buff->close(); delete buff; buff = NULL; } if (file) { file->close(); delete file; file = NULL; } radiostation.toCharArray(rs_str, radiostation.length()+1); URL=rs_str; file = new AudioFileSourceICYStream(URL); file->RegisterMetadataCB(MDCallback, (void*)"ICY"); buff = new AudioFileSourceBuffer(file, Buff); buff->RegisterStatusCB(StatusCallback, (void*)"buffer"); out = new AudioOutputI2SNoDAC(); out->SetGain(((float)Volume)/100.0); Serial.printf_P(PSTR("Set Volume: %d\n"), Volume); mp3 = new AudioGeneratorMP3(); mp3->RegisterStatusCB(StatusCallback, (void*)"mp3"); mp3->begin(buff, out); printRun=true; printRun1=true; } if (mp3->isRunning()) { if (!mp3->loop()) mp3->stop(); if (printRun ) { printRun=false; Serial.printf("Radio = play\n"); } status_radio = true; } else { if (printRun1 ) { printRun1=false; Serial.printf("MP3 done\n"); } if (millis()-lastms > time) { lastms = millis(); next_rs= true; restartURL = true; } } } else { status_radio = false; if (r_stop) { r_stop=false; Serial.printf("Radio = stop\n"); printRun=true; } } 1602 system_update_cpu_freq(SYS_CPU_160MHZ); Serial.begin(115200); const char *ptr = reinterpret_cast<const char *>(cbData); (void) isUnicode; // Punt this ball for now // Note that the type and string may be in PROGMEM, so copy them to RAM for printf char s1[300], s2[300]; strncpy_P(s1, type, sizeof(s1)); s1[sizeof(s1)-1]=0; strncpy_P(s2, string, sizeof(s2)); s2[sizeof(s2)-1]=0; Serial.printf("METADATA(%s) '%s' = '%s'\n", ptr, s1, s2); Serial.flush(); if (String(s1)=="StreamTitle") { singl_name = s2; } 484 124.0d 671.0d arduinoIDE 202663010 ESP8266 NodeMcu v3 202922315