Одновременное использование пинов для I2C и прочего...

llaabbss
Offline
Зарегистрирован: 28.12.2017

Здравствуйте,

Вопрос такой: возможно ли одновременно на одних и тех же пинах использовать I2C и передачу данных для не I2C устройств?

В частности, у меня есть ESP-07 и такие I2C устройства как RTC DS3231SN и расширитель цифровых портов MCP23017, но есть и Nextion экран. Так вышло, что экран подключил к SDA, SCL пинам, по которым идет работа с I2C.

Когда я пытаюсь прочесть время с RTC, то выводится явно неправильное время: 

2009-85-165 37:165:85

#include <Wire.h>
#include <RtcDS3231.h> 
#include "Adafruit_MCP23017.h" 
#include <SoftwareSerial.h>
#include <Nextion.h> 

SoftwareSerial nextion(5, 4);// nextion(TX, RX)
Nextion myNextion(nextion, 9600);

RtcDS3231<TwoWire> rtcObject(Wire);
Adafruit_MCP23017 mcp;

void setup(){

    rtcObject.Begin();
    RtcDateTime currentTime = rtcObject.GetDateTime();
    sprintf(str, "%d/%d/%d %d:%d:%d",
                currentTime.Year(),   //get year method
                currentTime.Month(),  //get month method
                currentTime.Day(),    //get day method
                currentTime.Hour(),   //get hour method
                currentTime.Minute(), //get minute method
                currentTime.Second()  //get second method
    );
       
    Serial.println(str); // вот здесь и выводится неправильное время 2009-85-165 37:165:85

    mcp.begin(0); // 0x20
}
Я проверил: конфликт с RTC (и потенциально с MCP23017) идет именно в указанных пинах SoftwareSerial. На этих же пинах я использую I2C: SCL = 4 пин, SDA = 5 пин. Когда я комментирую все, что связано с Nextion экраном, то время из RTC выводится верное.
 
Можно ли их как-то подружить?
 
Библиотеки взяты отсюда:
//https://github.com/bborncr/nextion
Logik
Offline
Зарегистрирован: 05.08.2014

В принципе иногда возможно. Но надо хороше представлять что делаеш. Сигналы разрисовать, чтоб обмен с одним устройством не оказывал влияния на другое. И по времени разумеется было разнесено. Вобщем дело тонкое и особенно если у Вас i2c пересекается с  uart. Думаю тут нужно еще и про электрическое согласование задуматся. ТХ нексианы как подключен? Попробуйте отрезать его на время (надеюсь он к Rx у SoftwareSerial). Если поможет - подключите через резистор 0,3-1КОм.

ПС. SoftwareSerial - плохо.