Вы плату какую выбрали? естественно ихтамнету, выберите вашу плату и они появятся, смотрите опубликованный вами в первом посте рисунок, увидели 36 и 39?
ЗЫ розовенькие это не только девушки интересной ориентации но и цвета GPIO
Вы плату какую выбрали? естественно ихтамнету, выберите вашу плату и они появятся, смотрите опубликованный вами в первом посте рисунок, увидели 36 и 39?
ЗЫ розовенькие это не только девушки интересной ориентации но и цвета GPIO
Я уже понял что плата не та выбрана. Как выбрать ТУ плату? Список то не маленький, а какая у меня? Где найти информацию?
На моей плате два i2c, в смысле железных.
Писал жеж уже, перечитай тему ты же сам написал, что плата у тебя WEMOS LOLIN32 Lite
а выбираешь хренте что, это такой особый вид мазохизма?
Давайте проясню ситуацию.
Шина I2C на ESP32 не связана жёстко с пинами так, как это сделано на 328-м МК.
Инициализация HAL происходит так:
log_i("Initialising I2C Master: sda=%d scl=%d freq=%d", sda, scl, frequency);
i2c_config_t conf = { };
conf.mode = I2C_MODE_MASTER;
conf.scl_io_num = (gpio_num_t)scl; // Сюда смотреть
conf.sda_io_num = (gpio_num_t)sda;
conf.scl_pullup_en = GPIO_PULLUP_ENABLE;
conf.sda_pullup_en = GPIO_PULLUP_ENABLE;
conf.master.clk_speed = frequency;
conf.clk_flags = I2C_SCLK_SRC_FLAG_FOR_NOMAL; //Any one clock source that is available for the specified frequency may be choosen
esp_err_t ret = i2c_param_config((i2c_port_t)i2c_num, &conf);
....
Т.е. для нормальной работы нужно физически подключить I2C Slave на те GPIO, которые описаны в variants.… той платы, что в наличии.
Если платы нет в списке, в принципе, можно брать любую похожую по схемотехническому решению. Хоть DevkitC для Wemos - плюс/минус все будет одинаково функционировать.
Например, если на пине 22 висит светодиод, то следует взять такую, раскладка GPIO в variants которой не привязывает SDA/SCL к данному пину.
Коли подходящей не нашлось - нет ничего страшного в том, чтобы заинитить Wire на свободных GPIO.
Обращу внимание на то, что во фреймворке для Arduino и на платах указываются номера GPIO, а не выводов ESP32.
А как мне узнать какой именно #define Pins_Arduino_h файл подтягивается?
Ты накатил уже чтоле )))
Выше, пост, там 5 пунктов, чётко, разжёвано, осталось только проглотить…
Пошёркался по интернету, везде кочует эта ошибка в распиновке, не соответствие описанию производителя платы, это я о CLK на 22 пине!
При компиляции, ежели включить подробный лог, написано что там подтягивается. Может и этот pins_arduino засветится.
Меня этот вопрос никогда не интересовал.
Узнать, куда нацелены в текущей сборке SDA и SCL можно просто распечатав их в Serial.
Вот, номера постов пока недоступны, повторяю, “радиостанция на броневике”
нет, смотреть только ручками, в аддоне
Номера постов доступны.
Нужно взять ссылку с цифирь, которые обозначают возраст поста, например: “13 мин”
Или под постом иконка “цепь”.
Господа, я очень признателен вам за участие в дебатах. но очень хочу “тайм аут”, спать рубит. Да и обкурить надо всё. К вечеру вернусь, может что и надумаем. По поводу lolin32-lite, я запускаю скеч примера, и ничего не получается, не те пины, НО запустить сканер с прописаными пинами и всё ровно, значит i2с не на 19 и 23 по умолчанию. А что ещё не так будит в дальнейшем. Завести датчик это можно, но хочется понять как работает, от куда настройки цепляются, и так далее. Я не пока не могу объяснить понятнее, здоровье не позволяет. Но позже я буду в норме. Еще раз всем спасибо и до связи (я надеюсь…)
Мысль неправильная, проверяем так, берём любую плату ESP32, выбираем в IDE Wemos Lolin32 Lite, подключаем LCD1602_I2C на 19 и 23 пины и загружаем этот скетч:
// ESP32 I2C Scanner
// Based on code of Nick Gammon http://www.gammon.com.au/forum/?id=10896
// ESP32 DevKit - Arduino IDE 1.8.5
// Device tested PCF8574 - Use pullup resistors 3K3 ohms !
// PCF8574 Default Freq 100 KHz
#include <Wire.h>
void setup()
{
Serial.begin (115200);
// Wire.begin (SDA, SCL); // sda= GPIO_21 /scl= GPIO_22 (to STD)
// WEMOS
Wire.begin ();
}
void Scanner ()
{
Serial.println ();
Serial.println ("I2C scanner. Scanning ...");
byte count = 0;
Wire.begin();
for (byte i = 8; i < 120; i++)
{
Wire.beginTransmission (i); // Begin I2C transmission Address (i)
if (Wire.endTransmission () == 0) // Receive 0 = success (ACK response)
{
Serial.print ("Found address: ");
Serial.print (i, DEC);
Serial.print (" (0x");
Serial.print (i, HEX); // PCF8574 7 bit address
Serial.println (")");
count++;
}
}
Serial.print ("Found ");
Serial.print (count, DEC); // numbers of devices
Serial.println (" device(s).");
}
void loop()
{
Scanner ();
delay (1000);
}
В мониторе порта имеем:
I2C scanner. Scanning ...
Found address: 63 (0x3F)
Found 1 device(s).
I2C scanner. Scanning ...
Found address: 63 (0x3F)
Found 1 device(s).
I2C scanner. Scanning ...
Found address: 63 (0x3F)
Found 1 device(s).
Резюме:
По умолчанию интерфейс I2C инициализируется значениями прописанными в распиновке выбранной платы, то-есть пины 19 и 23 для WEMOS LOLIN32 Lite
А вот такой вопрос, ESP32 имеет два интерфейса I2C, как задействовать второй?
И проверим подключение дисплея на нестандартных пинах:
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x3F,16,2); // set the LCD address to 0x27 for a 16 chars and 2 line display
void setup()
{
Wire.begin(16,17);
lcd.init(); // initialize the lcd
// Print a message to the LCD.
lcd.backlight();
lcd.setCursor(3,0);
lcd.print("Hello, world!");
lcd.setCursor(2,1);
lcd.print("Ywrobot Arduino!");
lcd.setCursor(0,2);
lcd.print("Arduino LCM IIC 2004");
lcd.setCursor(2,3);
lcd.print("Power By Ec-yuan!");
}
Wire1.begin(…); и тд.
Сканер портов адаптировать несложно, вот другие библиотеки использующие I2C?
#include "Wire.h"
void setup() {
Serial.begin(115200);
Wire1.begin(16,17,850000UL);
}
void loop() {
byte error, address;
int nDevices = 0;
delay(5000);
Serial.println("Scanning for I2C devices ...");
for(address = 0x01; address < 0x7f; address++){
Wire1.beginTransmission(address);
error = Wire1.endTransmission();
if (error == 0){
Serial.printf("I2C device found at address 0x%02X\n", address);
nDevices++;
} else if(error != 2){
Serial.printf("Error %d at address 0x%02X\n", error, address);
}
}
if (nDevices == 0){
Serial.println("No I2C devices found");
}
}
Какой библиотеке можно передать адрес инстанса TwoWire, та и будет работать сразу, адафруит, например:
bool Adafruit_BME280::begin(**uint8_t addr**, TwoWire *theWire) {
bmp.begin(0x..., &Wire1);