WI-FI интернет радио.

10427 ответов [Последнее сообщение]
1707
Offline
Зарегистрирован: 08.02.2017

Здравия желаю. Возникла подребнос изменить экран на 1602 у  ранее успешно собраный проект с экраном OLED SSD1306 .

Собственно, что нужно почитать, изменить для этого? У мамы плохое зрение, поэтому и нужна эта замена с выведением названия радиостанции.

ShAlex13
Offline
Зарегистрирован: 19.01.2018

Ткните носом, не могу найти. Где-то был проект KaRadio32 с управлением по тачу на экране.

pilnikov
pilnikov аватар
Offline
Зарегистрирован: 28.08.2015

с тачем карадио32 как раз таки есть, а вот 1602 - https://github.com/karawin/karadio-addons/tree/master/karadio_IIC_lcd16x2

либо https://github.com/karawin/karadio-addons/tree/master/karadiolcd16x2

1707
Offline
Зарегистрирован: 08.02.2017

Я правильно понимаю, что мне нужно добавить аддон экрана 1602 и пересобрать файл для прошивки, а потом подключившись к нужным выводам?

pilnikov
pilnikov аватар
Offline
Зарегистрирован: 28.08.2015

аддон - это плюсом еще один контроллер (в вашем случае - ардуина) со своей прошивкой. К нему подключается экран. С "базой" аддон соединяется по уарту

1707
Offline
Зарегистрирован: 08.02.2017

Принял, спасибо!

AVL4ARDUINO
Offline
Зарегистрирован: 04.01.2012

Всем привет!

Вопрос.

Какое радио посоветуете сделать только на 8266 и УНЧ.

Спасибо!

ShAlex13
Offline
Зарегистрирован: 19.01.2018

pilnikov пишет:

с тачем карадио32 как раз таки есть, а вот 1602 - https://github.com/karawin/karadio-addons/tree/master/karadio_IIC_lcd16x2

либо https://github.com/karawin/karadio-addons/tree/master/karadiolcd16x2

Был проект с SD-картой на которой хранилсь иконки станций, мелодии будильников и еще что-то.

А в этом проекте чет я не вижу зон куда и для чего тыкать в экран. Как он по тачу управляется?

pilnikov
pilnikov аватар
Offline
Зарегистрирован: 28.08.2015

https://github.com/schreibfaul1/ESP32-MiniWebRadio

Это который с иконками

В карадио - верх / низ экрана - громкость, правый / левый края - станции

ShAlex13
Offline
Зарегистрирован: 19.01.2018

pilnikov пишет:

https://github.com/schreibfaul1/ESP32-MiniWebRadio

Это который с иконками

В карадио - верх / низ экрана - громкость, правый / левый края - станции

Спасибо, это то что искал.

ShAlex13
Offline
Зарегистрирован: 19.01.2018

pilnikov пишет:

В карадио - верх / низ экрана - громкость, правый / левый края - станции

Чет не срабатывает. На таче выводы T_CLK, T_CS, T_DIN, T_DO, T_IRQ. Какой куда цыплять? В файле конфигурации реч идет только об одном GPIO для тача.

DIVGENY
Offline
Зарегистрирован: 23.08.2016

ShAlex13 пишет:

На таче выводы T_CLK, T_CS, T_DIN, T_DO, T_IRQ. Какой куда цыплять? В файле конфигурации реч идет только об одном GPIO для тача.

про файл конфигурации читаем на сайте автора 



TOUCH SCREEN:
P_TOUCH_CS GPIO of the t_cs pin of the touch or 255 if no screen
Other pins are t_clk, t_din, t_do respectively the spi clk, mosi, miso. 
 
                                   P_TOUCH_CS    ------ назначаем номер GPIO                                                

Другими выводами являются    -------     соответственно

                                            t_clk,  ----- clk

                                            t_din, ----- mosi

                                            t_do  ----- miso

                                       T_IRQ is not used.

читаем строки, ищем схему, смотрим схему - подключаем по схеме

создаем Bin файл из CSV, заливаем по нужному адресу.

ShAlex13
Offline
Зарегистрирован: 19.01.2018

DIVGENY пишет:

ShAlex13 пишет:

На таче выводы T_CLK, T_CS, T_DIN, T_DO, T_IRQ. Какой куда цыплять? В файле конфигурации реч идет только об одном GPIO для тача.

про файл конфигурации читаем на сайте автора 



TOUCH SCREEN:
P_TOUCH_CS GPIO of the t_cs pin of the touch or 255 if no screen
Other pins are t_clk, t_din, t_do respectively the spi clk, mosi, miso. 
 
                                   P_TOUCH_CS    ------ назначаем номер GPIO                                                

Другими выводами являются    -------     соответственно

                                            t_clk,  ----- clk

                                            t_din, ----- mosi

                                            t_do  ----- miso

                                       T_IRQ is not used.

читаем строки, ищем схему, смотрим схему - подключаем по схеме

создаем Bin файл из CSV, заливаем по нужному адресу.

Спасибо

ShAlex13
Offline
Зарегистрирован: 19.01.2018

Тач заработал, только почему-то при нажатии в верху экрана, громкость уменьшается, внизу-увеличивается, хотя логичнее было бы наоборот

pilnikov
pilnikov аватар
Offline
Зарегистрирован: 28.08.2015

sys.cali попробуйте

DIVGENY
Offline
Зарегистрирован: 23.08.2016

ShAlex13

 логично предположить, что изображение на экране развернуто на 180 .

ShAlex13
Offline
Зарегистрирован: 19.01.2018

DIVGENY пишет:

ShAlex13

 логично предположить, что изображение на экране развернуто на 180 .

Лево-право не перепутается тогда?

ShAlex13
Offline
Зарегистрирован: 19.01.2018

[quote=pilnikov]

sys.cali попробуйте

так вообще пропала регулировка изменений станций

вниз уменьшает громкость, все остальное увеличивает

DIVGENY
Offline
Зарегистрирован: 23.08.2016

ShAlex13 пишет:

Лево-право не перепутается тогда?


/*
 * xpt2046.h
 *
 *  Created on: jan 12, 2019
 *      Author: karawin
 *  adapted from https://github.com/loboris/ESP32_SPI_MASTER_NODMA_EXAMPLE
 */

#define LOG_LOCAL_LEVEL ESP_LOG_VERBOSE
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "esp_intr_alloc.h"
#include <string.h>
#include "xpt2046.h"
#include "esp_log.h"
#ifdef KaRadio32
#include "gpio.h"
#include "vs1053.h"
#include "eeprom.h"
#include "interface.h"
#endif


#define TAG  "XPT2046"

static	spi_device_handle_t t_handle = NULL; // SPI handle of the spi touch interface.
static spi_host_device_t spiNo;
static gpio_num_t  csPin;
static bool haveTouchOn = false;
static bool inCalibrate = false;

static uint32_t tp_calx = 0x1100BC5; //‭17828805‬
static uint32_t tp_caly = 0x2490ed2;
static int width = 320;
static int height = 240;
xTaskHandle handleTaskLcd;
// ============= Touch panel functions =========================================
void saveCalibration(uint32_t x, uint32_t y)
{
	g_device->tp_calx = x ;
	g_device->tp_caly = y ;
	saveDeviceSettings(g_device);
	ESP_LOGI(TAG, "Calibration saved: X:%x, Y:%x",x,y);
}
void getCalibration()
{
	if (g_device->tp_calx != 0) tp_calx = g_device->tp_calx;
	if (g_device->tp_caly != 0) tp_caly = g_device->tp_caly;
	ESP_LOGI(TAG, "Calibration read: X:%x, Y:%x",tp_calx,tp_caly);
}
void setTouchSize(int w, int h) {width = w; height = h; }
void getTouchSize(int* w, int* h) {*w=width; *h=height; }

bool haveTouch() {return haveTouchOn;}

void  getTaskLcd(xTaskHandle* hdt){handleTaskLcd = *hdt;}

void xpt_init()
{	
  gpio_get_touch(&csPin);
  gpio_get_spi_bus((uint8_t*)&spiNo,NULL,NULL,NULL);
  if ((csPin != GPIO_NONE) )
  {	
	haveTouchOn = true;
	gpio_config_t gpioConfig;
	gpioConfig.mode         = GPIO_MODE_OUTPUT;
	gpioConfig.pull_up_en   = GPIO_PULLUP_ENABLE;
	gpioConfig.intr_type    = GPIO_INTR_DISABLE;
	gpioConfig.pin_bit_mask = ((uint64_t)(((uint64_t)1)<<csPin));
	ESP_ERROR_CHECK(gpio_config(&gpioConfig));		
	gpio_set_level(csPin, 1);
	ESP_LOGI(TAG, "Touch cs: %d init done",csPin);
	
	if (t_handle==NULL)
	{
		spi_device_interface_config_t dev_config={			
		.clock_speed_hz   = 2000000,
		.command_bits	  = 0,
		.spics_io_num     =  -1,
		.cs_ena_posttrans = 1,
		.mode = 0,   
		.flags            = SPI_DEVICE_NO_DUMMY,
		.queue_size       = 1,
		};
		ESP_ERROR_CHECK(spi_bus_add_device(spiNo, &dev_config, &t_handle)); 
		ESP_LOGI(TAG, "... Added touch spi bus  cs: %d,  Speed= %d.",csPin,dev_config.clock_speed_hz);		
	}
	//init tp_calx & tp_caly
	getCalibration();	
  }
}


uint16_t IRAM_ATTR xpt_get_data(uint8_t addressbyte){
	uint16_t result;
    uint8_t datas[3] = {0};
    datas[0] = addressbyte;
	esp_err_t ret;
   spi_transaction_t t = {
        .length = 8 * 3,              // Len is in bytes, transaction length is in bits.
		.cmd = addressbyte,
        .tx_buffer = &datas,              // Data
        .flags = SPI_TRANS_USE_RXDATA,
    };
	ret = spi_device_transmit(t_handle, &t);  //Transmit!
	if (ret != ESP_OK) ESP_LOGE(TAG,"err: %d, xpt_get_data(%d), read: %d",ret,addressbyte,(uint16_t)*t.rx_data);
	result = (t.rx_data[1] << 8 | t.rx_data[2]) >> 3;
	return result;
}


//-----------------------------------------------
static int IRAM_ATTR tp_get_data(uint8_t type, int samples)
{
	int n, result, val = 0;
	uint32_t i = 0;
	uint32_t vbuf[18];
	uint32_t minval, maxval, dif;

	vTaskSuspend(handleTaskLcd);
	taskYIELD();
    if (samples < 3) samples = 1;
    if (samples > 18) samples = 18;
	gpio_set_level(csPin, 0);
    // one dummy read
    result = xpt_get_data(type);
//	gpio_set_level(csPin, 1);
    // read data
	while (i < 10) {
    	minval = 5000;
    	maxval = 0;
		// get values
//		gpio_set_level(csPin, 0);
		for (n=0;n<samples;n++) {
		    result = xpt_get_data(type);
			if ((result < 0)||(result >4096)) {vbuf[n] = 5000; continue;}//break;
			vbuf[n] = result;
			if (result < minval) minval = result;
			if (result > maxval) maxval = result;
		}
		if (result < 0) break;
		dif = maxval - minval;
		if (dif < 50) break;
		i++;
    }
	gpio_set_level(csPin, 1);
	vTaskResume(handleTaskLcd);
	if ((result < 0)||(result >4096)) return -1;

	if (samples > 2) {
		// remove one min value
		for (n = 0; n < samples; n++) {
			if (vbuf[n] == minval) {
				vbuf[n] = 5000;
				break;
			}
		}
		// remove one max value
		for (n = 0; n < samples; n++) {
			if (vbuf[n] == maxval) {
				vbuf[n] = 5000;
				break;
			}
		}
		for (n = 0; n < samples; n++) {
			if (vbuf[n] < 5000) val += vbuf[n];
		}
		val /= (samples-2);
	}
	else val = vbuf[0];

    return val;
}

//=============================================
bool IRAM_ATTR xpt_read_touch(int *x, int* y, uint8_t raw)
{
	if (inCalibrate) return false;
	int result = -1;
    int32_t X=0, Y=0, tmp;

    *x = 0;
    *y = 0;
    result = tp_get_data(0xB0, 4);
	if (result > 50)  {
		// tp pressed
		result = tp_get_data(0xD0, 15);
		if (result >= 0) {
			X = result;

			result = tp_get_data(0x90, 15);
			if (result >= 0) Y = result;
		}
	}
	if (result <= 50) return false;

	if (raw) {
		*x = X;
		*y = Y;
		return true;
	}

	int xleft   = (tp_calx >> 16) & 0x3FFF;
	int xright  = tp_calx & 0x3FFF;
	int ytop    = (tp_caly >> 16) & 0x3FFF;
	int ybottom = tp_caly & 0x3FFF;
	
	ESP_LOGV(TAG, "xleft:%d,xright:%d,ytop:%d,ybottom:%d,tp_calx:%d,tp_caly:%d,X:%d,Y:%d",xleft,xright,ytop,ybottom,tp_calx,tp_caly,X,Y);
//	ESP_LOGW(TAG, "X:%d,Y:%d",X,Y);
	
	if (((xright - xleft) != 0) && ((ybottom - ytop) != 0)) {
		X = ((X - xleft) * height) / (xright - xleft);
		Y = ((Y - ytop) * width) / (ybottom - ytop);
	}
	else return false;
//ESP_LOGI(TAG, "X:%d,Y:%d",X,Y);
	if (X < 0) X = 0;
	if (X > height-1) X = height-1;
	if (Y < 0) Y = 0;
	if (Y > width-1) Y = width-1;
	switch (getRotat()) {
		case 0:	//90%
			tmp = X;
			X = width-Y-1;
			Y = tmp;
			break;
		case 1:	// 270%
			tmp = X;
			X = Y;
			Y = height-tmp - 1;
			break;
		default:;
	}
	ESP_LOGD(TAG, "Rotate: %d, X:%d,Y:%d",getRotat(),X,Y);
	*x = X;
	*y = Y;
	return true;
}

bool xpt_touched()
{
	int result = -1;
	result = tp_get_data(0xB0, 4);
	if (result > 50) return true; else return false;
}

bool xpt_read_calibrate(int* x, int* y)
{
	int result = -1;
	result = tp_get_data(0xB0, 4);
	if (result > 50)  {
		// tp pressed
		result = tp_get_data(0xD0, 10);
		if (result >= 0) {
			*x = result;

			result = tp_get_data(0x90, 10);
			if (result >= 0) *y = result;
		}
	}
	if (result <= 50) return false;
	ESP_LOGI(TAG, "X:%d,Y:%d",*x,*y);

	vTaskDelay(10);	
	return true;
}

void userMsg(int val)
{
	if (getRotat()==val)
		kprintf("Touch the top right corner\n");
	else
		kprintf("Touch the bottom left corner\n");
}

void xpt_calibrate()
{
	int xl,yt,xr,yb;
	if (!haveTouchOn)
	{
		kprintf("No Touch screen detected\n");
		return;
	}
	inCalibrate = true;
	kprintf("INSTRUCTIONS:\n");
	userMsg(0);		
	while (!(xpt_read_calibrate(&xl, &yt)))vTaskDelay(1);
	kprintf("Ok\n");
	vTaskDelay(10);
	while (xpt_touched());
	userMsg(1);			
	while (!(xpt_read_calibrate(&xr, &yb)))vTaskDelay(1);
	kprintf("Ok\n");
	while (xpt_touched());
	
	ESP_LOGD(TAG, "xl:%x, yt:%x, xr:%x, yb:%x",xl,yt,xr,yb);
	kprintf("Done\n");

	tp_calx = xl<<16 | xr;
	tp_caly = yt<<16 | yb;

	saveCalibration(tp_calx, tp_caly);	
	inCalibrate = false;
}

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

void userMsg(int val)
{
	if (getRotat()==val)
		kprintf("Touch the top right corner\n");
	else
		kprintf("Touch the bottom left corner\n");
}

 

ShAlex13
Offline
Зарегистрирован: 19.01.2018

DIVGENY пишет:

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

Разобрался, все работает как надо.

lonely_jack
Offline
Зарегистрирован: 12.10.2015

Тема стухла?

WiFi и Bluetooh одновременно, похоже, не осилить на этой платке для наших целей

satelit 2
Offline
Зарегистрирован: 04.12.2016

спасибо большое, ссылка на телефоне работает, даже делать ничего не пришлось, ну краме того что отрезать динамик от колыбельни, с двумя мелодиями, которые всех раздражают

pepelnyy
Offline
Зарегистрирован: 29.01.2016

.

ShAlex13
Offline
Зарегистрирован: 19.01.2018

Онлайн генератор csv-bin чет не работает, пишет: Ошибка генерации bin файла. Попробуйте еще раз. Иногда выкидывает: Не верный формат.

P.S. Разобрался, сам в одной строчке косячнул. Все ОК

gergreko
Offline
Зарегистрирован: 13.09.2019

Добрый день!

Сегодня онлайн генератор не работает. Пробовал на немодифицированных csv файлах, все время  "Ошибка генерации bin файла. Попробуйте еще раз."

Tolcty
Offline
Зарегистрирован: 08.07.2019

gergreko пишет:

Добрый день!

Сегодня онлайн генератор не работает. 

Та же ерунда. никто не знает - когда починят? Или искать альтернативные способы? Подскажете?

Tolcty
Offline
Зарегистрирован: 08.07.2019

gergreko пишет:

Добрый день!

Сегодня онлайн генератор не работает. 

Та же ерунда. никто не знает - когда починят? Или искать альтернативные способы? Подскажете?

Tolcty
Offline
Зарегистрирован: 08.07.2019

gergreko пишет:

Добрый день!

Сегодня онлайн генератор не работает. 

Та же ерунда. никто не знает - когда починят? Или искать альтернативные способы? Подскажете?

ShAlex13
Offline
Зарегистрирован: 19.01.2018

Качайете вот это https://yadi.sk/d/Q638YQZCF09hQA

и сами по инструкции генерируете файл bin. esp-idf можно не устанавливать. Файл делается Питоном

Tolcty
Offline
Зарегистрирован: 08.07.2019

Мдя... Действительно ничего сложного... Все, спасибо!!! Разобрался. Проект движется к логическому завершению. Определился, что будет два энкодера и пульт.

Но! Вопросы все равно есть. В качестве ЦАПа платка на 1502. При переходе со станции с битрейтом 64 кБ\с на станцию с битрейтом 128 или выше идет треск, зацикливание звука, секунды 2-3. Потом типа отлипает и начинает играть нормально. Это первое. Второе, можно ли увеличить как-то число кликов на энкодере? Пока не приловчился, чувствую себя взломщиком сейфов прислушивающимся к щелчкам сейфа. :) 

Ну и экранчик, до сих пор не придумал, что выписать с Китая.

Basia
Offline
Зарегистрирован: 15.09.2019

Парни, есть у кого сборка TTGO TM под енкодер? Родное управление кривое да и рулить громкостью нет необходимости. 

Tolcty
Offline
Зарегистрирован: 08.07.2019

А еще, подскажите пожалуйста, как мне экспортировать плейлист с веб-морды? Захожу в карадио с планшета, редактировать список могу, экспортировать нет. Что сделать?

ALBEDO
Offline
Зарегистрирован: 15.09.2019

Добрый день. Собрал КаРадио32, ST7735, VS1003,энкодер ардуино, все работает но при добавлении громкости прорывается писк.

Что это,как убрать.

Basia
Offline
Зарегистрирован: 15.09.2019

У всех с громкостью нормально на TTGO TM? У меня тиховато чет, до блюпупа и вайфая не дотягивает значительно.

agat20
Offline
Зарегистрирован: 25.06.2016

 (не претендую на истину в последней инстанции) У меня так же VS1003 начиная с версии 1,5 появилось бульканье или басовитый писк (как то так) я откатился до версии 1,3 и все нормально стало со звуком.

ALBEDO
Offline
Зарегистрирован: 15.09.2019

У меня версия 1,9R5 интересно это у всех так ?

Я грешил на сам энкодер. 

Basia
Offline
Зарегистрирован: 15.09.2019

Есть  у кого плей-лист столичный под karadio? Чёт замаялся искать в сети.

fander
Offline
Зарегистрирован: 24.09.2018

у кого есть возможность-проверьте такой момент:связка wroover+vs1053+ir.При регулировании громкости пультом на станциях с битрейдом 320 наблюдаюся затыки?Именно если держать кнопку увеличения или уменьшения на пульте постоянно.

gergreko
Offline
Зарегистрирован: 13.09.2019

Получил плату TTGO Tm, прошил Karadio, сконфигурировал два энкодера, второй на переключение станций. Все работает очень даже прилично при минимуме телодвижений. Жду пульт. Жаль памяти маловато, при слабом сигнале wifi есть затыки звука. Ну и с AAC никак.

Поделитесь, кто-нибудь увеличивал spram на этой плате, если да, то есть ли улучшения?

pilnikov
pilnikov аватар
Offline
Зарегистрирован: 28.08.2015

https://m.facebook.com/gennady.morozov.39?_ft_=
Ну и с паяльником надо дружить

ALBEDO
Offline
Зарегистрирован: 15.09.2019

Посоветуйте. Подсветка дисплея 128*160,потребляет 40 милиампер(если не врет прибор).

Можно поцепить сразу на 4 ногу, не выгорит порт???? 

Basia
Offline
Зарегистрирован: 15.09.2019

gergreko, не поделитесь конфигом и фоткой на какие пины енкодеры подключали? Буду очень признателен! magaz@me.com

gergreko
Offline
Зарегистрирован: 13.09.2019

Basia пишет:

gergreko, не поделитесь конфигом и фоткой на какие пины енкодеры подключали? Буду очень признателен! magaz@me.com

Ловите на почте. Отправил два варианта. Себе оставил тот, где кнопка на энкодере для регулировки громкости, а второй энкодер для выбора станций только крутитлка:

P_ENC0_A,data,u8,32
P_ENC0_B,data,u8,33
P_ENC0_BTN,data,u8,14
P_ENC1_A,data,u8,15
P_ENC1_B,data,u8,12
P_ENC1_BTN,data,u8,255
 
gergreko
Offline
Зарегистрирован: 13.09.2019

Спасибо. А паяльника мы флюсом задобрим)

Tolcty
Offline
Зарегистрирован: 08.07.2019

To Basia:
https://www.drive2.ru/b/481751570539610911/
Список станций.

AVL4ARDUINO
Offline
Зарегистрирован: 04.01.2012

gergreko пишет:

Добрый день!

Сегодня онлайн генератор не работает. Пробовал на немодифицированных csv файлах, все время  "Ошибка генерации bin файла. Попробуйте еще раз."

Какой онлайн генератор, проясните, пожалуйста.

Спасибо.

gergreko
Offline
Зарегистрирован: 13.09.2019

Конвертер конфигураций csv в bin http://totel.kusto.com.ru:18888/karadio/

curat0r
Offline
Зарегистрирован: 28.08.2014

Добрый день, кто-нибудь может поделиться ссылкой на все размеры и расстояния платы TTGO Zero?

rank
Offline
Зарегистрирован: 31.07.2017

Может у кого-то было подобное и может подсказать..

Плата WROOM32 и синяя vs1053

Подключение такое:

P_MISO,data,u8,19
P_MOSI,data,u8,23
P_CLK,data,u8,18
P_XCS,data,u8,32
P_RST,data,u8,12
P_XDCS,data,u8,33
P_DREQ,data,u8,34

Залил последнюю прошивку со своим конфингом. В итоге звук есть, но громкость и прочие настройки vs1053 не регулируется из веб интерфейса. vs1053 взял рабочую, которая стояла в karadio, там через веб всё работало. Напряжение питания 5 вольт в норме. В чём может быть причина?

 

AIV
Offline
Зарегистрирован: 21.09.2019

gergreko пишет:

Получил плату TTGO Tm, прошил Karadio, сконфигурировал два энкодера, второй на переключение станций. Все работает очень даже прилично при минимуме телодвижений. Жду пульт. Жаль памяти маловато, при слабом сигнале wifi есть затыки звука. Ну и с AAC никак.

Поделитесь, кто-нибудь увеличивал spram на этой плате, если да, то есть ли улучшения?

Пришлите и мне пожалуйста данные для подключения энкодеров к данной плате.