Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

5ый семестр / 1. Производственная практика / стащил с работы / 64 урок - TCP сервер и клиент на Ардуино

.pdf
Скачиваний:
3
Добавлен:
18.07.2023
Размер:
5.39 Mб
Скачать

{

int tableSize = 0; (table) {

=regnum; // Изменить при изменении кол-ва регистров

i= 0; i < tableSize; i++) {if((modbusSlaveAddresFromIndex(i,table)) == addr){return i;}}

1;

modbusSlaveAddresFromIndex(byte index, byte table)

(table) {

modbusSlaveAddresTable_4[index];

1;

checkModbusRange(int startAddr, int addrNumber, byte table)

i=0; i < addrNumber; i++) {if(!(checkModbusAddres((startAddr+i),table))){return false;}} true;

modbusSlaveBuildException( byte exception ) { = _modbusSlaveBuffer[1];

modbusSlaveBuffer[0] = 1; modbusSlaveBuffer[1] = func + 0x80; modbusSlaveBuffer[ 2 ] = exception; modbusSlaveBufferSize = 3;}

modbusSlaveSendTxBuffer()

modbusSlaveBuffer[0] == 0) {_modbusSlaveTCPClient.stop(); return;} modbusSlaveMBAPBuffer[4] = highByte(_modbusSlaveBufferSize);

_modbusSlaveMBAPBuffer[5] = lowByte(_modbusSlaveBufferSize); (http://mypracticmodbusSlaveTCPClient.ru .write( _modbusSlaveMBAPBuffer, 6 );

_modbusSlaveTCPClient.write( _modbusSlaveBuffer, _modbusSlaveBufferSize );

/goto/ArduinoSys.php)

_modbusSlaveBufferSize = 0;

}

byte _modbusGetSlaveRxBuffer()

currentByte = 0; bBuffOverflow = false;

currentByteIndex = 0; modbusSlaveBufferSize = 0;

modbusSlaveTCPClient.available() ) {currentByte = _modbusSlaveTCPClient.read(); (currentByteIndex = 64) bBuffOverflow = true;}

currentByteIndex++;

flow) {return -3; } modbusSlaveBufferSize;

process_modbus_FC3(byte table)

= word( _modbusSlaveBuffer[2], _modbusSlaveBuffer[3] ); byteRegsno = word( _modbusSlaveBuffer[4], _modbusSlaveBuffer[5] );

index;

modbusSlaveBuffer[ 2 ] = byteRegsno * 2;

_modbusSlaveBufferSize = 3;

(http://mypractic.ru

for (i = startAddr; i < startAddr + byteRegsno; i++) {

/goto/fn1.php)index = modbusSlaveIndexForAddres(i, table);

if (table == 4) {value = _modbusSlaveDataTable_4[index]; }

_modbusSlaveBuffer[ _modbusSlaveBufferSize ] = highByte(value); (//freekassamodbusSlaveBufferSize++;.ru/)

_modbusSlaveBuffer[ _modbusSlaveBufferSize ] = lowByte(value); _modbusSlaveBufferSize++;

}

_modbusSlaveSendTxBuffer(); return _modbusSlaveBufferSize + 2;

}

byte process_modbus_FC6()

{

int addres = word( _modbusSlaveBuffer[2], _modbusSlaveBuffer[3] ); int index;

index = modbusSlaveIndexForAddres(addres, 4);

_modbusSlaveDataTable_4[index] =word( _modbusSlaveBuffer[4], _modbusSlaveBuffer[5] ); _modbusSlaveBufferSize = 6;

_modbusSlaveSendTxBuffer(); return _modbusSlaveBufferSize + 2;

}

byte process_modbus_FC16( )

{

byte func = _modbusSlaveBuffer[1];

int startAddr = _modbusSlaveBuffer[2] << 8 | _modbusSlaveBuffer[3]; int byteRegsno = _modbusSlaveBuffer[4] << 8 | _modbusSlaveBuffer[5]; int i;

int index; _modbusSlaveBuffer[4] = 0;

_modbusSlaveBuffer[5] = byteRegsno; _modbusSlaveBufferSize = 6;

for (i = 0; i < byteRegsno; i++) {

index = modbusSlaveIndexForAddres((startAddr+i), 4);

_modbusSlaveDataTable_4[index] =word( _modbusSlaveBuffer[ 7 + i * 2 ], _modbusSlaveBuffer[8 + i * 2 ]);

}

_modbusSlaveSendTxBuffer(); return _modbusSlaveBufferSize +2;

}

0

() ОТВЕТИТЬ

gheki.chan@mail.ru ()

22.11.2018 в 17:11 (http://mypractic.ru/urok-64-tcp-server-i-klient-na-arduino-biblioteka- uipethernet.html#comment-16273)

Спасибо конечно, но боюсь этот код для меня сложноват будет, не осилить мне его. Я надеялся что будет намного проще……………..нельзя ли как нибудь к имеющимся скетчам — ModBus RTU Slave и ModBus RTU Master прицепить скетч TCP клиента ( sketch_64_3 ) точнее не прицепить а

воссоединить их.

0

() ОТВЕТИТЬ

Arsbond ()

22.11.2018 в 18:49 (http://mypractic.ru/urok-64-tcp-server-i-klient-na-arduino-biblioteka- uipethernet.html#comment-16276)

Подвяжите библиотеку

#include

#include

#include

и копируйте код что я выложил прямо в скетч компилируйте и все заработает

0

() ОТВЕТИТЬ

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Arsbond ()

 

 

 

22.11.2018 в 18:50 (http://mypractic.ru/urok-64-tcp-server-i-klient-na-arduino-

 

 

 

biblioteka-uipethernet

 

 

 

 

 

 

 

 

 

 

 

.

 

html#comment-16277)

(http://mypractic.ru

 

 

 

#include SPI.h

/goto/ArduinoSys.php)

#include IPAddress.h

 

 

 

#include UIPEthernet.h

 

 

 

не вставляется в угловых скобках текст

 

 

 

названия в угловых скобках

 

 

 

 

 

 

 

 

 

 

0

 

 

 

 

 

 

 

 

 

 

() ОТВЕТИТЬ

Arsbond ()

22.11.2018 в 18:56 (http://mypractic.ru/urok-64-tcp-server-i-klient-na-arduino-biblioteka- uipethernet.html#comment-16278)

Еще не уверен что у дуньки хватит мощи на работу getway ем советую использовать например esp8266

(http://mypractic.ru

 

0

()

ОТВЕТИТЬ

/goto/fn1.php)

 

 

 

 

 

 

 

(//freekassa.ru/)

 

 

gheki.chan@mail.ru ()

22.11.2018 в 19:08 (http://mypractic.ru/urok-64-tcp-server-i-klient-na-arduino-biblioteka- uipethernet.html#comment-16279)

Arsbond мне важен код не столько для работы а сколько для понимания происходящего процесса ну и чтоб я его мог переделать подстроить под свои нужды.

В вашем коде я не вижу этого процесса я новичок, голову сломаю, уж извините ……может и разберусь лет через пять

0

() ОТВЕТИТЬ

Trung ()

16.02.2019 в 11:21 (http://mypractic.ru/urok-64-tcp-server-i-klient-na-arduino-biblioteka- uipethernet.html#comment-19288)

Здравствуйте!

Вам спасибо большое за уроки. Я уже учился в России, но сейчас живу и работаю во Вьетнаме. Сейчас меня интересуют проблемы обмена данными между Ардуино и компьютером по Ethernet. Не могли бы Вы помочь мне?

Моя электронная почта: thanhtrungnguyen234@gmail.com.

Заранее благодарю!

0

() ОТВЕТИТЬ

Эдуард ()

16.02.2019 в 11:24 (http://mypractic.ru/urok-64-tcp-server-i-klient-na-arduino-biblioteka- uipethernet.html#comment-19290)

Здравствуйте!

Я практически закончил уроки на эту тему. Все есть на сайте. Что непонятно, спрашивайте.

0

() ОТВЕТИТЬ

2019 в 15:33 (http://mypractic.ru/urok-64-tcp-server-i-klient-na-arduino-biblioteka-

.html#comment-20807)

спасибо за урок и код. К сожалению, он у меня хотя и загрузился, но работать отказался. вопроса:

ставить DND и GW ,если все происходит в локальной сети 192.168.140.х

вообще можно протестировать шильд ENC28J60 Ethernet для Arduino Nano на предмет жив нет ? Подключен верно (он втыкается в Нано), диоды на RJ-45: зеленый горит, оранжевый

пойти на скромный материальный взнос за запуск ТСР — сервера на ардуне с клиентом

на сторонней машине чтобы передавать данные аналоговых контактов (контакты считывать

(http://mypractic.ru

умею). Ардуина живая, на ней запускал 20х2 LCD экран.

/goto/ArduinoSys.php)

0

() ОТВЕТИТЬ

()

2019 в 13:51 (http://mypractic.ru/urok-64-tcp-server-i-klient-na-arduino-biblioteka-

.html#comment-21247)

. Предложил студентам колледжа в качестве задания на уроке.

0

() ОТВЕТИТЬ

(http://mypractic.ru

/goto/fn1.php)

(//freekassa.ru/)

К.

2019 в 07:09 (http://mypractic.ru/urok-64-tcp-server-i-klient-na-arduino-biblioteka-

.html#comment-22154)

, Эдуард!

пожалуйста почему строка кода ответ сервера клиенту выглядит — client.println(«Server

— ведь эта команда отправки данных от клиента серверу, а не сервера клиенту.

было бы — server..println(«Server ready»);

много литературы, но никто пояснения не дает.

за Ваши уроки.

0

() ОТВЕТИТЬ

Сергей К.

19.04.2019 в 07:10 (http://mypractic.ru/urok-64-tcp-server-i-klient-na-arduino-biblioteka- uipethernet.html#comment-22155)

server.println(«Server ready»);

0

() ОТВЕТИТЬ

(http://mypractic.ru

/goto/ArduinoSys.php)

Эдуард ()

19.04.2019 в 09:21 (http://mypractic.ru/urok-64-tcp-server-i-klient-na-arduino-biblioteka- uipethernet.html#comment-22165)

Здравствуйте!

В программе мы создали сервер: EthernetServer server(2000);

Т.е. наше устройство — это сервер с определенным портом для прослушивания. Для работы с клиентом мы создали объект клиент:

EthernetClient client;

Это не устройство, а объект, содержащий данные подключенного клиента. Сам клиент расположен на другом устройстве. Объект клиент мы используем для доступа к этому клиенту. Считайте, что это сложный адрес, по которому сервер посылает данные.

0

() ОТВЕТИТЬ

(http://mypractic.ru

/goto/fn1.php)

Сергей К.

19.04.2019 в 09:59 (http://mypractic.ru/urok-64-tcp-server-i-klient-na-arduino-biblioteka- (//freekuiassapethernet.ru/) .html#comment-22166)

Эдуард, спасибо Вам большое за разъяснения и оперативность! У меня был подобный ход мыслей, но хотелось подтверждение специалиста. Единственно смущала сложная логика процесса. Не могли бы Вы мне разъяснить почему так и подтвердить ход моих мыслей исходя из Ваших разъяснений: — созданный нами объект клиент пишет на сервер, а сервер посылает ответ «физическому» клиенту.

Думаю и остальным форумчанам будет интересно.

0

() ОТВЕТИТЬ

Роман

25.06.2019 в 23:43 (http://mypractic.ru/urok-64-tcp-server-i-klient-na-arduino-biblioteka- uipethernet.html#comment-25092)

не компилируется код на Arduino IDE 1.8.9.

вываливается куча предупреждений и стоит на месте. может памяти не хватает на Arduino Nano

0

() ОТВЕТИТЬ

Олег

26.07.2019 в 20:40 (http://mypractic.ru/urok-64-tcp-server-i-klient-na-arduino-biblioteka- uipethernet.html#comment-25838)

стать хорошая …а каким образом реализовать 2 сервера на 1 Дуине ? к примеру ХТТП и удп 1 естесно внешний второй внутренний для связи с наноми … ?

0

() ОТВЕТИТЬ

Александр

12.11.2019 в 10:33 (http://mypractic.ru/urok-64-tcp-server-i-klient-na-arduino-biblioteka- uipethernet.html#comment-28748)

большое спасибо вам за статьи! Я только начинаю разбираться в работе с сетью. как реализовать на двух ENC28J60 и двух микроконтроллерах прозрачный мост

удлинитель) LAN. То есть надо сделать удлинитель сети Ethernet через COM порт (либо RS радио модем). Допустим микроконтроллер принимает пакет, передает его другому м/к по

линии связи, а тот воспроизводит этот пакет на ENC28J60 с другой стороны.

понятно объяснил. Готовых недорогих устройств не нашел. Подскажите, куда копать

0

() ОТВЕТИТЬ

2020 в 14:45 (http://mypractic.ru/urok-64-tcp-server-i-klient-na-arduino-biblioteka-

.html#comment-31320)

, добрый день!

Arduino UNO и ENC28J60 на базе W5500. Нужно ли вносить какие-либо изменения в Ваши библиотеки и пр.)?

0

() ОТВЕТИТЬ

(http://mypractic.ru

/goto/ArduinoSys.php) Эдуард ()

28.01.2020 в 11:16 (http://mypractic.ru/urok-64-tcp-server-i-klient-na-arduino-biblioteka- uipethernet.html#comment-31330)

Здравствуйте!

Думаю, будет работать без изменений, но надо пробовать.

0

() ОТВЕТИТЬ

2020 в 06:04 (http://mypractic.ru/urok-64-tcp-server-i-klient-na-arduino-biblioteka-

.html#comment-31679)

здравствуйте

Подскажите про пример с TCP клиент. Я правильно понимаю, что TCP Builder выступает (http://mypracticсервером.ru , а ардуино — клиентом? Тогда зачем в TCP Builder нажимать кнопку Connect? Откуда

сервер может знать с какого адреса к нему будут подключаться клиенты? И что за порт 1025 — где

/goto/fn1.php)

он прописывается на стороне клиента? И куда собственно TCP Builder пытается присоединиться, нажимая кнопку Connect, если он сам и есть сервер? У меня при нажатии кнопки Connect

(//freekassaвыходит.ru/)сообщение «чё-то там попытка неудачна»

0

() ОТВЕТИТЬ

Эдуард ()

11.02.2020 в 09:55 (http://mypractic.ru/urok-64-tcp-server-i-klient-na-arduino-biblioteka- uipethernet.html#comment-31685)

Здравствуйте!

Нет. Компьютер это клиент, а плата Ардуино — сервер. В постановке задачи это написано.

0

() ОТВЕТИТЬ

Сергей

12.02.2020 в 05:15 (http://mypractic.ru/urok-64-tcp-server-i-klient-na-arduino- biblioteka-uipethernet.html#comment-31705)

Я наверное чего-то глобально не понимаю… Вот же написано: «Попробуем противоположный вариант: клиент реализован на Ардуино, сервер – на компьютере.»…

0

() ОТВЕТИТЬ

Эдуард ()

12.02.2020 в 09:28 (http://mypractic.ru/urok-64-tcp-server-i-klient-na- arduino-biblioteka-uipethernet.html#comment-31708)

Здравствуйте!

Да, я не на тот пример посмотрел. Конечно, компьютер сервер. Я уже не помню всех деталей. Но я все проверял, все у меня работает, как написано.

Кнопка Connect, скорее всего, запускает прослушивание у сервера. А

какое сообщение об ошибке вы получаете? У вас IP-адрес сервера правильный?

0

() ОТВЕТИТЬ

Сергей

14.02.2020 в 06:11 (http://mypractic.ru/urok-64-tcp-server- i-klient-na-arduino-biblioteka-uipethernet.html#comment- 31753)

У вас в тексте небольшая ошибка. В этом примере нужно нажимать не кнопку Connect, а кнопку Listen — она действительно запускает прослушивание. Пример работает, спасибо. А 1025 — это видимо порт, через который клиент подключился к серверу. Вопросик — не подскажете как «переподключиться»? Я все сделал как написано, все получилось, данные туда-сюда пересылаются. Нажимаю Destroy Socket и пытаюсь все сделать еще раз — не получается. При нажатии на Listen вылетает ошибка типа «данный адрес уже занят» (не помню точно текст ошибки). Такое ощущение что второй раз с одного и того же адреса клиенту не разрешено подключаться или порт занят, или как это называется? Перезагрузка ПК помогает, но как-то не хочется каждый раз перезагружаться…

0

(http://mypractic.ru

/goto/ArduinoSys.php)

Эдуард ()

14.02.2020 в 09:58 (http://mypractic.ru/urok-64-tcp-server- i-klient-na-arduino-biblioteka-uipethernet.html#comment- 31755)

Здравствуйте!

Я так давно писал этот урок. Но точно помню, что подключался несколько раз и компьютер не перезагружал. А перезапуск программы не помогает?

0

(http://mypractic.ru

/goto/fn1.php)

(//freekassa.ru/)

Сергей

14.02.2020 в 14:06 (http://mypractic.ru/urok-64-tcp-server-i-klient-na-arduino-biblioteka- uipethernet.html#comment-31761)

Перезапуск программы не помогает. Ну и шут с ней. Главное подключиться удается и данные туда-сюда ходят. Спасибо

0

() ОТВЕТИТЬ

Владимир

26.03.2020 в 16:37 (http://mypractic.ru/urok-64-tcp-server-i-klient-na-arduino-biblioteka- uipethernet.html#comment-32659)

Доброе времени суток.

Пытался реализовать связь между двумя arduino, сделав один из них TCP сервером, а другой клиентом.

И, по идеи, связь есть.

Но почему-то подключение постоянно отключается. И подключается не с первого раза, а с попытки 5 или больше.

(функция client.connect(ipServer, LOCAL_PORT) возвращает false)

0

() ОТВЕТИТЬ

Владимир

26.03.2020 в 16:38 (http://mypractic.ru/urok-64-tcp-server-i-klient-na-arduino-biblioteka- uipethernet.html#comment-32660)

Скетч сервера:

#include

#include

#define LOCAL_PORT 2000 #define RELE 7

#define CLOSE 0 #define OPEN 1

// определяем конфигурацию сети

byte mac[] = {0xAE, 0xB2, 0x26, 0xE4, 0x4A, 0x5C}; // MAC-адрес byte ip[] = {192, 168, 1, 1}; // IP-адрес

EthernetServer server(LOCAL_PORT); // создаем сервер, порт 2000

EthernetClient client; // объект клиент

void setup() {

Ethernet.begin(mac, ip); //Ethernet.begin(mac, ip, myDns, gateway, subnet); //

инициализация контроллера

server.begin(); // включаем ожидание входящих соединений

Serial.begin(115200);

Serial.println(«———-TCP SERVER START—————-«); pinMode(RELE, OUTPUT); // вывод реле digitalWrite(RELE, CLOSE);

}

void loop() { delay(10);

client = server.available(); // ожидаем объект клиент if (client){

// есть данные от клиента if(client.available() > 0) {

char chr = client.read(); // чтение символа Serial.print(«received: «); Serial.println(chr);

if(chr == ‘0’) digitalWrite(RELE, CLOSE); // если 0, гасим светодиод if(chr == ‘1’) digitalWrite(RELE, OPEN); // если 1, зажигаем светодиод

}

}

(http://mypractic.ru } /goto/ArduinoSys.php) Скетч клиента:

#include

#include

#define LOCAL_PORT 2000 #define BUTTON 7 #define LED 2

#define CLOSE 0 #define OPEN 1

// определяем конфигурацию сети

byte mac[] = { 0xAE, 0xB2, 0x26, 0xE4, 0x4A, 0x6D}; // MAC-адрес

byte ipServer[] = {192, 168, 1, 1}; //byte ipServer[] = {192, 168, 1, 10}; // IP-адрес byte ipClient[] = {192, 168, 1, 10}; // IP-адрес

EthernetClient client; // создаем клиента

void setup() {

Ethernet.begin(mac, ipClient); // инициализация контроллера pinMode( LED, OUTPUT);

(http://mypractic.ru digitalWrite(LED, CLOSE); Serial.begin(115200);

/goto/fn1.php) delay(100);

Serial.println(«connecting…»);

// устанавливаем соединение с сервером

(//freekassa.ru/)while(!client.connect(ipServer, LOCAL_PORT)) { client.flush();

client.stop();

Serial.println(«connecting…»);

delay(500);

}

Serial.println(«connected»);

}

void loop() {

if(!digitalRead(BUTTON)){

delay(7);

if(!digitalRead(BUTTON)){ //char inChr = Serial.read(); if (client.connected()) { client.print(‘1’); digitalWrite(LED, OPEN); delay(2000); client.print(‘0’); digitalWrite(LED, CLOSE);

}

}

}

// если сервер отключился, останавливаем клиент if (!client.connected()) { Serial.println(«disconnecting.»);

client.flush(); client.stop();

while(!client.connect(ipServer, LOCAL_PORT)) { Serial.println(«connecting…»);

delay(500);

}

Serial.println(«connected»);

}

}

0

() ОТВЕТИТЬ

Владимир. Донецк

28.04.2020 в 13:10 (http://mypractic.ru/urok-64-tcp-server-i-klient-na-arduino-biblioteka- uipethernet.html#comment-33369)

Ну раз подключается, хоть и далеко не идеально, значит скетч всё-таки работает. Посудите сами: если в скетче есть ошибки (в плане установления соединения), то каким образом может происходить соединение?

В просторах очень много нареканий на стабильность этого модуля (ENC28J60). А в вашем случае вообще мог попасться нелучший экземпляр.

Для отладки прототипа приложения можно и на этом модуле потренироваться, но в дело пускать лучше что нибудь понадежнее.

Есть модули для которых переделка кода c UIPEthernet.h на другую библиотеку особых усилий не потребует (или вообще не понадобится).

Тем не менее, сам пробую первые шаги в Ethernet именно на ENC28J60, т.к. автор сайта чудесно описал азы для новичков. Грех не воспользоваться его трудами и не потренироваться на тренажере от Гуру.

0

() ОТВЕТИТЬ

. Донецк

2020 в 13:59 (http://mypractic.ru/urok-64-tcp-server-i-klient-na-arduino-biblioteka-

.html#comment-33373)

автору сайта и другим знатокам.

все уже попробовали ситуацию с первым примером (МК это сервер, ПК – клиент), когда к

подключаются более одного клиента (через TCP/IP Builder). И все заметили, что (http://mypracticlient.ru.write(chr) отсылает сообщение на все подключенные машины-клиенты, ибо:

/goto/ArduinoSys.php)

server.write(что-нибудь);

Отправляет данные всем клиентам, подключенным к серверу.

(http://mypractic.ru

/goto/fn1.php)

законы библиотеки.

раннее речь заходила о свитчах, то каким образом можно реализовать отправку пакета к клиенту именно с нужным MAC-адресом (или IP), соответственно и путь доставки,

просчитался оптимальный (я думаю это уже на совести свитчей)?

ли это осуществить средствами UIPEthernt?

нужна другая библиотека, а может быть вообще другой модуль (хотя последнее – вряд

дело, я могу сам организовать фильтр получаемых пакетов данных на стороне каждого (по принципу: не твоё? – не читай!). Но для чего тогда сетевая аппаратная часть? Зачем ресурсы МК? Ведь пакет всёравно придется принять. Это всё как то не по людски, через налево.

спасибо всем, кто согласится помочь.

0

() ОТВЕТИТЬ

(//freekassa.ru/)

Тимофей

03.05.2020 в 13:16 (http://mypractic.ru/urok-64-tcp-server-i-klient-na-arduino-biblioteka- uipethernet.html#comment-33458)

Здравствуйте, подскажите про пример с TCP клиент.

Как я могу реализовать передачу последовательности чисел так, чтобы они записывались в определенные переменные в программе?

Например, я знаю, что в начале последовательности чисел, будет стоять число трехзначное, которое мне нужно записать в переменную «а», в функции, которая выполняет b=a+1. Проще говоря, как передать массив чисел? И уже поэлементно доставать и записывать значения в переменные? Возможно ли такое?

Заранее огромное спасибо!

0

() ОТВЕТИТЬ

Эдуард ()

03.05.2020 в 13:21 (http://mypractic.ru/urok-64-tcp-server-i-klient-na-arduino-biblioteka- uipethernet.html#comment-33459)

Здравствуйте!

Вы сами определяете формат передачи данных.

Например, если последовательность данных фиксированной длины, можете просто передавать числа в тестовом виде через пробелы.

Можете в начале передать длину массива.

Если могут быть функционально разные данные, можете передать в начале пакета символ, который сообщит, как интерпретировать данные.

Могут быть более сложные протоколы.

0

() ОТВЕТИТЬ

Вячеслав

05.05.2020 в 16:46 (http://mypractic.ru/urok-64-tcp-server-i-klient-na-arduino-biblioteka- uipethernet.html#comment-33493)

Здравствуйте! Вижу что тема жива и такой вопрос: использую не ардуину, а ESP32 devkit v1. Вроде должны быть те же яйца, только в профиль. но не получается подключить ENC модуль

. У нее 2 SPI, ни по одному коннекта нет. Статический ip не помогает. Может что в надо изменить? Или прописать как-нибудь пины SPI, дав понять плате куда слать

0

() ОТВЕТИТЬ

Владимир. Донецк

06.05.2020 в 00:25 (http://mypractic.ru/urok-64-tcp-server-i-klient-na-arduino-biblioteka- uipethernet.html#comment-33502)

Пример кода и схема соединений?

Сам работаю параллельно с ESP, там действительно все не совсем так. Кое что приходится вручную переделывать.

0

() ОТВЕТИТЬ

(http://mypractic.ru

/goto/ArduinoSys.php)

(http://mypractic.ru

/goto/fn1.php)

(//freekassa.ru/)

Вячеслав

06.05.2020 в 10:10 (http://mypractic.ru/urok-64-tcp-server-i-klient-na-arduino- biblioteka-uipethernet.html#comment-33505)

Использую код почти как в первом примере: #include

#include

// определяем конфигурацию сети

byte mac[] = {0xAE, 0xB2, 0x26, 0xE4, 0x4A, 0x5C}; // MAC-адрес byte ip[] = {192, 168, 0, 115}; // IP-адрес

byte myDns[] = {192, 168, 0, 1}; // адрес DNS-сервера byte gateway[] = {192, 168, 0, 1}; // адрес сетевого шлюза byte subnet[] = {255, 255, 255, 0}; // маска подсети

EthernetServer server(2000); // создаем сервер, порт 2000 EthernetClient client; // объект клиент

boolean clientAlreadyConnected= false; // признак клиент уже подключен

void setup() { if(Ethernet.begin(mac))

{

Serial.println(» DHCP problem»); Ethernet.begin(mac, ip, myDns, gateway, subnet);

}

server.begin(); // включаем ожидание входящих соединений

Serial.begin(115200); Serial.print(«Server address:»);

Serial.println(Ethernet.localIP()); // выводим IP-адрес контроллера

}

void loop() {

client = server.available(); // ожидаем объект клиент if (client) {

// есть данные от клиента

if (clientAlreadyConnected == false) { // сообщение о подключении

Serial.println(«Client connected»); client.println(«Server ready»); // ответ клиенту clientAlreadyConnected= true;

}

while(client.available() > 0) {

char chr = client.read(); // чтение символа server.write(chr); // передача клиенту Serial.write(chr);

}

}

}

Подключение 5v и GND беру с Arduino Nano (единственный стабильный источник питания который смог найти), CLK -> D14, MISO -> D12, MOSI -> D13, CS ->D15

С данным скетчем не получаю ip от роутера, ставится статический, потом с телефона через приложение пытаюсь установить коннект — не выходит. С компа тоже не пингуется адрес.

0

() ОТВЕТИТЬ

Владимир. Донецк

06.05.2020 в 15:27 (http://mypractic.ru/urok-64-tcp-server-i-klient-na- arduino-biblioteka-uipethernet.html#comment-33509)

ну во первых #include надо прописать в тексте комментария по другому (без или «»), их не видно.

потом:

для ESP 32 вывода для SPI я пока вижу такие: сигнал / вывод / физический пин

SCK / GPIO18 / 35

SO / GPIO19 / 38

SI / GPIO23 / 36

CS / GPIO5 / 36

в библиотеке возможно прописано так: #define ENC28J60_SPI_CS (1<<PB4)

(http://mypractic.ru

/goto/ArduinoSys.php)

(http://mypractic.ru

/goto/fn1.php)

(//freekassa.ru/)

#define ENC28J60_SPI_MOSI (1<<PB5) #define ENC28J60_SPI_MISO (1<<PB6) #define ENC28J60_SPI_SCK (1<<PB7)

я пока не копался в исходнике, т.к. не знаю что у Вас подключено. А так же где в ESP 32 D12 — D15 тоже не рассмотрел.

Вобщем надо эти вещи уточнять и скорее всего проводить хирургическое вмешательство в исходники.

Буду рад поучаствовать, если все будет уточнено.

0

() ОТВЕТИТЬ

Вячеслав

06.05.2020 в 15:56 (http://mypractic.ru/urok-64-tcp-server- i-klient-na-arduino-biblioteka-uipethernet.html#comment- 33512)

подключаю библиотеки следующие

#include SPI.h #include UIPEthernet.h

По поводу пинов: ориентируюсь на эту картинку https://myrobot.ru/wiki/uploads/Experiences/esp32_pinout.png

В папке utility библиотеки UIPEthernet нашел файл ENC28J60Network.h в нем описано подобное, но для меня это сложно)

0

Владимир. Донецк

07.05.2020 в 14:16 (http://mypractic.ru/urok-64-tcp-server- i-klient-na-arduino-biblioteka-uipethernet.html#comment- 33530)

в ENC28J60Network.h описано:

#define ENC28J60_CONTROL_CS SS #define SPI_MOSI MOSI

#define SPI_MISO MISO #define SPI_SCK SCK #define SPI_SS SS

пока нет времени искать дальше (я на работе), но попробуйте узнать значения этих констант, прописав прамо в своем коде

Serial.println(SPI_MOSI, DEC) и т.д.

что за значения выдаст?

их можно будет сравнить с номерами пинов на каринке распиновки

0

Владимир. Донецк

07.05.2020 в 14:31 (http://mypractic.ru/urok-64-tcp-server- i-klient-na-arduino-biblioteka-uipethernet.html#comment- 33531)

код я немного проще написал — без плавающего IP (но для atmega328p)

#include

#include

byte mac[] = {0xAE, 0xB2, 0x26, 0xE4, 0x4A, 0x54}; // MAC-адрес byte my_ip[] = {192, 168, 0, 11}; // IP-адрес клиента

byte ipServ[] = {192, 168, 0, 10}; // IP-адрес сервера

EthernetClient client;

void setup() {

Ethernet.begin(mac, my_ip); // инициализация контроллера Serial.begin(9600);

delay(200);

Serial.println(«connecting…»);

delay(500);

// устанавливаем соединение с сервером if (client.connect(ipServ, 2000)) { Serial.println(«connected»); // успешно client.print(‘1’); // на пробу

}

else {

Serial.println(«connection failed»); // ошибка

}

}

0