• Система автоматизации с открытым исходным кодом на базе 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 указан выше...
 
Сверху Снизу