• Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Запрос библиотек/драйверов для Sming

Кто может поделиться библиотекой для работы с max7219? Большое спасибо! И где можно почитать, посмотреть как работать с SPI?
С SPI все просто -
MISO == GPIO12
MOSI == GPIO13
CLK == GPIO14

+ какой-то GPIO для chip select по выбору и вперед.

[HASHTAG]#include[/HASHTAG] <SPI.h>
uint8_t read_from_spi, write_to_spi;

SPI.begin();
read_from_spi = SPI.transfer(write_to_spi);

и собственно все...Тут вот пример для общения со сдвиговыми регистрами 74hc165 + 74hc595 https://github.com/avr39-ripe/HeatControl/blob/thermostat/app/spi_loop.cpp
а тут - как читать из Serial. в качестве источника - ардуинка :) https://github.com/avr39-ripe/ValveControl/blob/master/app/application.cpp#L52
 

vasp1976

New member
В общем такая просьба, есть у меня часы, с большими 15 см цифрами, очень нравятся, но настраивать время можно только с IR пульта, кторый уже несколько лет как кудато ушёл :(
В часах RTC чип, DS1307, а в нём довльно быстро уплывает время, сейчас приходится периодически вытаскивать модуль с RTC чипом и настраивать его через ардуину с компа. Но както надоело.
Думаю поставить esp8266 синхронизировать её по NTP и отдавать данные часам по I2C как это делают оригинальные чиы DS. Часы глупые - время постоянно тянут с RTC, в своем контроллере вообще ничего кроме отображения не делают, так что должно сработать. Нашел готовый эмулятор https://github.com/thexeno/Firmwares/tree/master/projects/ds1307emulator но он под PIC контроллер, у меня знаний не хватает это дело портировать. Может у кого получится, врядли там очень сложно, I2C на esp есть, slave-ом оно работать может.
 

tretyakov_sa

Moderator
Команда форума
В общем такая просьба, есть у меня часы, с большими 15 см цифрами, очень нравятся, но настраивать время можно только с IR пульта, кторый уже несколько лет как кудато ушёл :(
В часах RTC чип, DS1307, а в нём довльно быстро уплывает время, сейчас приходится периодически вытаскивать модуль с RTC чипом и настраивать его через ардуину с компа. Но както надоело.
Думаю поставить esp8266 синхронизировать её по NTP и отдавать данные часам по I2C как это делают оригинальные чиы DS. Часы глупые - время постоянно тянут с RTC, в своем контроллере вообще ничего кроме отображения не делают, так что должно сработать. Нашел готовый эмулятор https://github.com/thexeno/Firmwares/tree/master/projects/ds1307emulator но он под PIC контроллер, у меня знаний не хватает это дело портировать. Может у кого получится, врядли там очень сложно, I2C на esp есть, slave-ом оно работать может.
Может просто пульт на ESP сделать?
 

vasp1976

New member
Может просто пульт на ESP сделать?
так а нету пульта, его бы я и без esp сделал :), вообще часы изначально достались мне без пульта, год выпуска у них чтото около 2002. но реально самое то на кухне, и ночью светло от них :), на atmel контроллере какомто древнем. производитель, наш, Российский, списывался с ними - просят за новый пульт 2 тыс руб. меня жаба задавит столько им отдавать за такое старьё. а узнать сейчас что он там должен слать - даже не представляю как без оригинального.
 

vasp1976

New member
ну пока праздники идут, углубился в тему, а espшка то slave-ом и не умеет на I2C висеть как я понял, так что видимо никто тут не поможет, в SDK во всех примерах оно только как мастер девайс, в инете только вопрсы подобные моему :( Жаль, хотел малой кровью обойтись, но видно придется еще и ардуину втыкать между часами и esp :(. Это будет в разы проще, на AVRку уже нашел эмулятор, даже не DS1307 а DS1374, так что в дуину двестирублевую это дело закатаю, а время по UART с espшки буду брать.
 
Последнее редактирование:

vasp1976

New member
Да сделал уже на выходных все. Пашут часики, по инету синхронизируются.
Для ардуины написал в её IDE, для espшки - в эклипсе.
По сути весь код дуины - пара строк
основное это вот:

в setup:

Wire.begin(0x68); // join i2c bus with address #68 (RTC chip)
Wire.onRequest(requestEvent); // register event
Wire.onReceive(receiveEvent);

void receiveEvent(int numbytes)
{
while(Wire.available())
{
number = Wire.read();
}
}

ну и собственно тут отвечаем на запросы часов и минут, там правда еще дофига всяческих регистров, но мне этого не нужно было
от слова совсем :)

void requestEvent()
{
Wire.write(byte(0x00));
if(number==1) Wire.write(decToBcd(iminute));//minutes
if(number==2) Wire.write(decToBcd(ihour)); //hours
}
// Convert normal decimal numbers to binary coded decimal
byte decToBcd(byte val)
{
return ( (val / 10 * 16) + (val % 10) );
}
 
Сверху Снизу