• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

GPIO32,33

SergNed

New member
Обнаружил косяк.Не могу определить это только у моей платы или у всех так или это косяк
библиотек ардуино.
Оператор touchRead(32) снимает показания с пина 33
соответственно touchRead(33)снимает показания с пина 32.
ПИНЫ ПЕРЕПУТАНЫ ДЛЯ touch ДЛЯ КОМАНД digitalRead ИЛИ digitalWrite НЕ ПЕРЕПУТАНЫ.
ПРИ ЭТОМ если пытаешься использовать эти пины в разных качествах
например :
ledcSetup(2, 5000,
8)
;//Channel = 0 freq = 5000 разрешение-8бит
ledcAttachPin(33,2); // пин,Channel привязка пина 33 к ШИМ
ledcWrite(2, 255);
int k=touchRead(32);

то touchRead(32) не работает или если int k=touchRead(33); то уже ШИМ не работает
 

pvvx

Активный участник сообщества
В Arduino:
C:\Users\????\AppData\Local\Arduino15\packages\esp32\hardware\esp32\1.0.4\variants
варианты плат:
alksesp32
bpi-bit
d-duino-32
d1_mini32
d32
d32_pro
doitESP32devkitV1
esp32
esp32-devkit-lipo
esp32-evb
esp32-gateway
esp32-poe
esp32-poe-iso
esp320
esp32thing
esp32vn-iot-uno
espea32
espectro32
espino32
feather_esp32
firebeetle32
fm-devkit
frog32
gpy
heltec_wifi_kit_32
heltec_wifi_lora_32
heltec_wifi_lora_32_V2
heltec_wireless_stick
hornbill32dev
hornbill32minima
intorobot-fig
lolin32
lopy
lopy4
m5stack_core_esp32
m5stack_fire
m5stick_c
magicbit
mhetesp32devkit
mhetesp32minikit
Microduino-esp32
nano32
nina_w10
node32s
nodemcu-32s
odroid_esp32
onehorse32dev
oroca_edubot
pico32
pocket_32
quantum
sparkfun_lora_gateway_1-channel
t-beam
tinypico
ttgo-lora32-v1
ttgo-t1
turta_iot_node
twatch
vintlabsdevkitv1

Вы не указали какой у вас.
 

pvvx

Активный участник сообщества
Для указания touchRead() и прочих пинов в концепции Ардуино принято обращаться по именам пинов, а не по непонятным цифрам.
Как пример для esp32-devkit-lipo:
static const uint8_t T0 = 4;
static const uint8_t T1 = 0;
static const uint8_t T2 = 2;
static const uint8_t T3 = 15;
static const uint8_t T4 = 13;
static const uint8_t T5 = 12;
static const uint8_t T6 = 14;
static const uint8_t T7 = 27;
static const uint8_t T8 = 33;
static const uint8_t T9 = 32;

Имена пинам придумывают кто захочет или опубликует рисунок, типа такого:


По этим причинам, в Ардуино, вам придется гадать какой пин на вашей плате как назван самому или назначить в variants\*.h как вам нравится.
 

pvvx

Активный участник сообщества

SergNed

New member
извините что сообщения повторяются,пока не освоился.
pinMode(T8, OUTPUT);
ledcSetup(2, 5000, 8);//Channel = 0 freq = 5000 разрешение-8бит
ledcAttachPin(T8,2); // пин,Channel M2 шим
ledcWrite(2, 255);//ledcWrite(ledChannel, dutyCycle);
int k=touchRead(T9);
этот код не работает,не читается touchRead(T9)

а если такой
int k2=touchRead(T8),k3=touchRead(T9);
то работает
 

pvvx

Активный участник сообщества
извините что сообщения повторяются,пока не освоился.
pinMode(T8, OUTPUT);
ledcSetup(2, 5000, 8);//Channel = 0 freq = 5000 разрешение-8бит
ledcAttachPin(T8,2); // пин,Channel M2 шим
ledcWrite(2, 255);//ledcWrite(ledChannel, dutyCycle);
int k=touchRead(T9);
этот код не работает,не читается touchRead(T9)

а если такой
int k2=touchRead(T8),k3=touchRead(T9);
то работает
А для pinMode() и ledcSetup(), ledcAttachPin(), ... в Arduino используют другие номерки :)

Если что-то не устраивает в данном бардаке с GPIO на всех(!) платах для Arduino - обращайтесь к писателям и поклонникам Arduino.
 

SergNed

New member
ха!
ардуино DUE,ардуино mini такого не наблюдалось,а вы какую среду посоветуете?
 

SergNed

New member
в моей голове не укладывается как могут работать digitalWrite исправно с определённым пином но если
добавляешь в код touchRead который до этого тоже работал исправно то ничего не работает
 

pvvx

Активный участник сообщества
touchRead() - это работает не GPIO контроллер.
 

pvvx

Активный участник сообщества
От этого не факт что после назначения пинов в режим touch, или I2C, или ещё чего-то, что он будет читаться и работать в последующем как GPIO.
Кода деинициализации нет.
 

SergNed

New member
От этого не факт что после назначения пинов в режим touch, или I2C, или ещё чего-то, что он будет читаться и работать в последующем как GPIO.
Кода деинициализации нет.
От этого не факт что после назначения пинов в режим touch, или I2C, или ещё чего-то, что он будет читаться и работать в последующем как GPIO.
Кода деинициализации нет.
дак я и не пытаюсь деинициализировать,ok опытным путём определяю что ledcAttachPin(T8 работает с 33 пином
а touchRead(T8) уже работает с 32 пином и когда я эти команды применяю в одной программе то одно из двух
уже не работает.какой тогда выход?
редактировать esp32-hal-touch.c", "esp32-hal-touch.h", "esp32-hal-gpio.c", "esp32-hal-gpio.h" ?
 

pvvx

Активный участник сообщества
А это прошлогодний баг в touch и всем пофиг. Никому ESP32 да ещё с Arduino не нужно.
У меня ни одна плата с ESP32 нормально не стартует после записи в неё кода из Arduino. C 3-го или 5-го раза только.
Лет через десяток поправят, тогда и пользуйте... :p
 

SergNed

New member
Печально,дак проблема только в ардуино? т.е всётаки можно заставить работать пин 32 на шим а пин 33
на тачсенсор? или наоборот?
 

pvvx

Активный участник сообщества
Moжно.
C++:
void setup() {
  Serial.begin(115200);
  Serial.printf("idf_version: %s\n", esp_get_idf_version());
  ledcSetup(0, 5000, 8);
  ledcAttachPin(32, 0);
}

uint8_t dutyCycle = 1;

void loop() {
  Serial.println(touchRead(T8));
  ledcWrite(0, dutyCycle++);
  delay(500);
}
1583428574877.png
На GPIO33 26 импульсов ->
Log:
Код:
idf_version: v3.2.3-14-gd3e562907
...

26
26
26
26
26
26
26
...
Патч в cores/esp32/esp32-hal-gpio.c указан выше...
 
Сверху Снизу