ESP8266: #include <Keyboard.h>вызывает фатальную ошибку: HID.h: No such file or directory

ОС: Mac Arduino: 1.8.13 Библиотека клавиатуры: 1.0.2

ESP8266

У меня есть универсальная плата ESP8266, и у меня есть следующий код

void setup() {
  // put your setup code here, to run once:
  pinMode(LED_BUILTIN, OUTPUT);
  Keyboard.begin();
}

void loop() {}

Однако я получаю следующий вывод:

In файл включен из /Users/quba/Sandbox/sketch_feb07a/sketch_feb07a.ino:1:0:
/Applications/Arduino.app/Contents/Java/libraries/Keyboard/src/Keyboard.h:25:17: fatal error: HID.h: Нет такого файла или каталога
#включить "HID.h"
                          ^
компиляция прекращена.
статус выхода 1
Ошибка компиляции для общего модуля платы ESP8266.
Не мог найти boards.txt in /Users/quba/Library/Arduino15 / packages / arduino/hardware/megaavr/1.8.7. Это pre-1.5?

, 👍1


2 ответа


4

Библиотека клавиатуры предназначена только для Arduino ATmega32U4 на базе Arduino (и других подобных с USB). ESP8266 не имеет USB, так как же он может использовать библиотеку клавиатуры?

,

Я добавил картинку, чтобы вы могли видеть контакты TX и RX, а также USB, @Quintin Balsdon

Библиотека клавиатуры предназначена для устройств, которые могут напрямую подключаться к шине USB, таких как AVR ATmega32U4. ESP8266 на NodeMCU, который вы показываете на картинке, не имеет такой возможности, но у него есть отдельный чип Serial-to-USB, который может общаться с ПК через USB. Даже в этом случае он может действовать только как периферийное устройство для ПК, а не как USB - "Мастер", который может управлять своими собственными USB-периферийными устройствами (например, клавиатурой)., @StarCat


-2

Я искал ответ и нашел отличное объяснение здесь:

Arduino/Genuino Uno не поддерживает клавиатуру. Вы можете увидеть его в hardware/ardunino/avr/libraries/HID/HID.h. Этот файл включен из Keyboard.h и содержит #if defined(USBCON). Но USBCON не определен для Arduino/Genuino Uno. Вам нужно использовать другую плату для клавиатуры.

Его поддерживают следующие контроллеры:

* ATmega32U6
* ATmega8U2
* ATmega16U2
* ATmega16U4
* ATmega32U2
* ATmega32U4
* и некоторые ATxxUSBxx

Arduino/Genuino Uno использует ATmega32U8.

Таким образом, ESP8266, как любезно упомянул StarCat выше, не может напрямую взаимодействовать с шиной USB. У него нет оборудования, которое позволяет ему быть скрытым

Короче говоря, сама плата должна определить поле USBCON (и иметь соответствующее оборудование), которое позволяет Arduino быть USB-мастером.

Я все еще хотел бы знать, как найти код, стоящий за этим, чтобы я мог видеть, что я получаю, когда покупаю плату, но это часть процесса обучения.

,

Нет, правлению не нужно ничего "определять". Плата должна быть основана на микроконтроллере, который поддерживает библиотека. Короче говоря: НЕ ESP8266. Если вы хотите все-в-одном WiFi/Bluetooth и USB, то вы должны использовать (только что выпущенный) чип ESP32-S2. Я думаю, что вы путаете плату (всю большую черную штуку) с микроконтроллером (серебряная коробка на одном конце) и думаете, что платы обеспечивают такую функциональность, когда речь идет исключительно о MCU и о том, что он может обеспечить. Вам нужно научиться читать спецификации и понимать спецификации, прежде чем вы сможете узнать, что предоставляется, @Majenko

Все на плате, что *не является* серебряной коробкой, - это просто вспомогательные компоненты, которые либо позволяют MCU функционировать, либо просто облегчают жизнь конечному пользователю. Одним из таких "вспомогательных компонентов" является чип, который соединяет контакты UART MCU с вашим компьютером через USB. Просто чисто для удобства. Это длинный тонкий черный чип в нижней части вашей фотографии. Вот и весь USB, который там есть, и не имеет никакого отношения к микроконтроллеру - просто чисто дополнение дизайнера платы, чтобы облегчить программирование., @Majenko

Квинтин, клавиатура-это не USB-мастер. или вы хотите прикрепить клавиатуру к esp8266?, @Juraj

@Juraj - нет, я надеялся использовать ESP8266 в качестве клавиатуры с прикрепленными кнопками. Я решил написать сервер nodejs и вместо этого реагировать на нажатия кнопок как на веб-события (если я собираюсь использовать 8266). Я мог бы просто использовать Nano 33, который у меня лежал, потому что я бы предпочел не правильный код на стороне клиента. Мой код отлично работает, по крайней мере, на Nano. Спасибо, @Quintin Balsdon