
5ый семестр / 1. Производственная практика / стащил с работы / 64 урок - TCP сервер и клиент на Ардуино
.pdf
{
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