Ethernet Shield не работает с TFT-экраном
Я пытаюсь объединить Arduino UNO, Ethernet Shield и Waveshare 2,8" TFT Shield. Поскольку я новичок в этом, я в основном занимаюсь базовыми вещами.
Мне удалось заставить Ethernet Shield и TFT Shield работать по отдельности. Затем, поскольку экран TFT не сможет использовать интерфейс ICSP, я подключил перемычки, как указано в wiki.
Конфигурация оборудования
- При использовании платы Arduino с интерфейсом ICSP перемычки SB1, SB2 и SB3 на ЖК-модуле должны быть разомкнуты.
- При использовании платы Arduino без интерфейса ICSP перемычки SB1, SB2 и SB3 на модуле должны быть соединены с 0R. резистор соответственно.
После этого я собрал все вместе и попытался заставить их работать с приведенным ниже кодом, но по какой-то причине, я не знаю, экран Ethernet перестал работать. Я получаю сообщение об ошибке Ethernet Shield не найден. Извините, не могу работать без оборудования. :(
. Несмотря на ошибку, мой TFT-экран загорается и запускается демонстрация. Возможно, я упускаю что-то простое. Буду признателен за любую помощь или руководство.
#include <stdint.h>
#include <LCD.h>
#include <SPI.h>
#include <Ethernet.h>
IPAddress server(192, 168, 0, 107);
IPAddress ip(192, 168, 0, 177);
IPAddress myDns(192, 168, 0, 1);
IPAddress gateway(192, 168, 0, 1);
EthernetClient client;
byte mac[] = {0x90, 0xA2, 0xDA, 0x00, 0x23, 0x36};
void setup()
{
Serial.begin(9600);
while (!Serial) {
; // ждем подключения последовательного порта. Требуется только для родного порта USB
}
/*--------- TFT Init -------------*/
SPI.setDataMode(SPI_MODE3);
SPI.setBitOrder(MSBFIRST);
SPI.setClockDivider(SPI_CLOCK_DIV4);
SPI.begin();
Tft.lcd_init();
/*--------- TFT Init End -------------*/
/*--------- Ethernet Setup -------------*/
Serial.println("Initialize Ethernet with DHCP:");
if (Ethernet.begin(mac) == 0) {
Serial.println("Failed to configure Ethernet using DHCP");
if (Ethernet.hardwareStatus() == EthernetNoHardware) {
Serial.println("Ethernet shield was not found. Sorry, can't run without hardware. :(");
} else if (Ethernet.linkStatus() == LinkOFF) {
Serial.println("Ethernet cable is not connected.");
}
// нет смысла продолжать, так что ничего не делайте навсегда:
// пока (истина) {
// delay(1);
// }
}
// напечатать ваш локальный IP-адрес:
Serial.print("My IP address: ");
Serial.println(Ethernet.localIP());
/*--------- Ethernet Setup End -------------*/
/*--------- Ethernet Connection Demo Setup -------------*/
if (client.connect(server, 3000)) {
Serial.print("connected to ");
Serial.println(client.remoteIP());
// Делаем HTTP-запрос:
client.println("GET / HTTP/1.1");
client.println("Host: localhost");
client.println("Connection: close");
client.println();
} else {
// если вы не получили соединение с сервером:
Serial.println("connection failed");
}
beginMicros = micros();
/*--------- Ethernet Connection Demo Setup End -------------*/
}
void loop()
{
/*--------- TFT Demo -------------*/
Tft.lcd_clear_screen(WHITE);
for (int x = 1; x <= 240; x++) {
for (int y = 1; y <= 320; y++) {
Tft.lcd_draw_rect(x, y, 1, 1, RED);
delay(1);
}
}
/*--------- TFT Demo End -------------*/
/*--------- Ethernet Check-Up ---------*/
switch (Ethernet.maintain()) {
case 1:
//обновленная ошибка
Serial.println("Error: renewed fail");
break;
case 2:
//возобновление успеха
Serial.println("Renewed success");
//выводим ваш локальный IP-адрес:
Serial.print("My IP address: ");
Serial.println(Ethernet.localIP());
break;
case 3:
// повторная привязка не удалась
Serial.println("Error: rebind fail");
break;
case 4:
// успех повторной привязки
Serial.println("Rebind success");
//выводим ваш локальный IP-адрес:
Serial.print("My IP address: ");
Serial.println(Ethernet.localIP());
break;
default:
//ничего не случилось
break;
}
/*--------- Ethernet Check-Up End ---------*/
/*--------- Ethernet Demo ---------*/
int len = client.available();
if (len > 0) {
byte buffer[80];
if (len > 80) len = 80;
client.read(buffer, len);
if (printWebData) {
Serial.write(buffer, len); // показать в последовательном мониторе (замедляет некоторые платы)
}
byteCount = byteCount + len;
}
// если сервер отключен, останавливаем клиент:
if (!client.connected()) {
endMicros = micros();
Serial.println();
Serial.println("disconnecting.");
client.stop();
Serial.print("Received ");
Serial.print(byteCount);
Serial.print(" bytes in ");
float seconds = (float)(endMicros - beginMicros) / 1000000.0;
Serial.print(seconds, 4);
float rate = (float)byteCount / seconds / 1000.0;
Serial.print(", rate = ");
Serial.print(rate);
Serial.print(" kbytes/second");
Serial.println();
// ничего не делать навсегда:
// пока (истина) {
// delay(1);
// }
}
/*--------- Ethernet Demo End ---------*/
}
@bennygenel, 👍0
2 ответа
Сообщение об ошибке исходит от библиотеки Ethernet. Поскольку у меня нет достаточного оборудования для проверки, это указывает на конфликт контактов. Таким образом, экран ethernet v1 использует/нуждается в одном или нескольких контактах, которые использует экран ЖК-дисплея.
Как это выяснить, покопайтесь в документации схемы и посмотрите на используемые контакты.
Имейте в виду, что на сеть посвящена ethernet Shield v2, аппаратное обеспечение которого отличается от v1.
- Схемы для Waveshare и Ethernet Shield v1
- Проверьте также наличие коротких замыканий между разъемом USB (Arduino)/Ethernet и указанными выше экранами, я обычно изолирую их куском изоляционной ленты (на всякий случай).
ОБНОВЛЕНО
Экран Ethernet: Arduino обменивается данными как с W5100, так и с SD-картой, используя шину SPI (через заголовок ICSP).
Это цифровые контакты 10, 11, 12 и 13 Uno.
Контакт 10 используется для выбора W5100 и контакт 4 для SD-карты.
Эти контакты нельзя использовать для общего ввода-вывода
Общий ресурс волны использует CS=D10, RS=D7, RST=D9, а SD CS можно определить, например, на SD_CS 5 с помощью этой библиотеки поскольку библиотеку waveshare нельзя использовать, кроме как для базовой игры.
Эта библиотека совместима с Adafruit_GFX, поэтому работает широкий спектр программ и других библиотек.
Так что ваш шанс
- для переназначения SD CS с помощью программного обеспечения, если другие контакты не конфликтуют (вы должны это проверить) или
- получить другой разъем Ethernet (не защитный, потому что он более гибкий) или
- вручную переназначьте проводами dupont экран ЖК-дисплея (потому что он самый верхний) и измените соответствующие контакты в заголовочном файле libs.
Не обрезайте дорожки и не припаивайте их, это не стоит усилий, и вы можете что-нибудь сломать
Изучив схемы экрана Ethernet и экрана TFT, можно сделать вывод, что контакт выбора микросхемы (CS) экрана Ethernet использует тот же контакт (контакт D4 Arduino), что и контакт прерывания сенсорной панели на ваш экран TFT (TP_IRQ) на схеме.
Я не думаю, что вы можете решить эту проблему, не модифицируя какое-либо оборудование. Либо экран TFT, либо экран Ethernet должны быть изменены для использования другого контакта, и эти изменения должны быть отражены в базовой библиотеке.
Я предполагаю, что проще всего модифицировать экран Ethernet, так как его печатная плата доступна с двух сторон. Вы также можете отрезать контакт D4 от экрана TFT и соединить его печатную дорожку с неиспользуемым цифровым контактом через короткий провод.
- Разбор HTTP с аутентификацией в Arduino + Ethernet Shield
- связь между двумя arduino с помощью ENC28J60?
- Отключить экран Ethernet
- Ограничения подключения ко многим ардуино через Ethernet?
- DF Robot W5200 Ethernet Shield для Arduino Uno не работает?
- Ethernet Shield не подключается
- Arduino Ethernet Shield отключается через несколько секунд
- SD-карта не инициализируется
Спасибо за ваш ответ. Прежде всего, я изолировал USB, как вы сказали, когда впервые установил экран. Во-вторых, поскольку я могу запускать вышеприведенный код отдельно без ошибок, я предполагаю, что мой код подходит для моих версий. Допустим, есть конфликт контактов. Есть ли у вас какие-либо идеи/предложения о том, как это исправить? Как вы думаете, я могу установить для них другой пин только с помощью кода? Библиотека Ethernet имеет функцию [
Ethernet.init(sspin)
](https://www.arduino.cc/en/Reference/EthernetInit). Значит ли это, что мне нужно что-то паять? Еще раз спасибо., @bennygenelПосмотрите мое редактирование и сначала протестируйте другую библиотеку TFT без щита Ethernet., @Codebreaker007