ENC28J60 +CHAP PHP на STM32F103VE

ramgc
Ср 14 февраля 2018 г. 12:49
Здравствуйте, я проектирую схему с STM32F103VE и просто подключите ENC28J60 для Интернета. У меня есть сервер с XAMPP, и я работаю должным образом с приложениями в Android, я использую библиотеку serasidis_ethercard_stm, когда http добраться до моего PHP -сервера, не получайте ничего хорошего, если положить другие сети равным.

Код WebClient для Arduino в этой библиотеке
#include #include // ethernet interface mac address, must be unique on the LAN static byte mymac[] = { 0x74,0x69,0x69,0x2D,0x30,0x31 }; byte Ethernet::buffer[700]; static uint32_t timer; const char website[] PROGMEM = "82.221.41.158"; // called when the client request is complete static void my_callback (byte status, uint16_t off, uint16_t len) { Serial.println(">>>"); Ethernet::buffer[off+300] = 0; Serial.print((const char*) Ethernet::buffer + off); Serial.println("..."); } void setup () { Serial.begin(57600); Serial.println(F("\n[webClient]")); if (ether.begin(sizeof Ethernet::buffer, mymac) == 0) Serial.println(F("Failed to access Ethernet controller")); if (!ether.dhcpSetup()) Serial.println(F("DHCP failed")); ether.printIp("IP: ", ether.myip); ether.printIp("GW: ", ether.gwip); ether.printIp("DNS: ", ether.dnsip); if (!ether.dnsLookup(website)) Serial.println("DNS failed"); ether.printIp("SRV: ", ether.hisip); } void loop () { ether.packetLoop(ether.packetReceive()); if (millis() > timer) { timer = millis() + 5000; Serial.println(); Serial.print("<<< REQ "); ether.browseUrl(PSTR("/comprueba_maq_ON.php?maquina="), "1", website, my_callback); } }

Стивестронг
Ср 14 февраля 2018 г. 14:02
Я могу только рекомендовать использовать модули W5500 (Wiznet) вместо модулей ENC28J60.
Чип Wiznet гораздо более надежен (мой опыт), и LIB для этого лучше поддерживается.
Цены на модуль W5500 также конкурентоспособны с ценами модуля ENC: https: // www.aliexpress.com/item/reply ... 56354.HTML

Вассилис
Ср 14 февраля 2018 г. 15:16
@ramgc IP в вашем эскизе (82.221.41.158) не функциональна (по крайней мере для меня). Пожалуйста, предоставьте нам эскиз, в котором используется действующий общедоступный IP или имя общественного домена.

ramgc
Ср 14 февраля 2018 г. 15:21
[Вассилис - Ср. 14 февраля 2018 г. 15:16] - @ramgc IP в вашем эскизе (82.221.41.158) не функциональна (по крайней мере для меня). Пожалуйста, предоставьте нам эскиз, в котором используется действующий общедоступный IP или имя общественного домена.
ОК, спасибо
#include #include // ethernet interface mac address, must be unique on the LAN static byte mymac[] = { 0x74,0x69,0x69,0x2D,0x30,0x31 }; byte Ethernet::buffer[700]; static uint32_t timer; const char website[] PROGMEM = "82.223.11.159"; // called when the client request is complete static void my_callback (byte status, uint16_t off, uint16_t len) { Serial.println(">>>"); Ethernet::buffer[off+300] = 0; Serial.print((const char*) Ethernet::buffer + off); Serial.println("..."); } void setup () { Serial.begin(57600); Serial.println(F("\n[webClient]")); if (ether.begin(sizeof Ethernet::buffer, mymac) == 0) Serial.println(F("Failed to access Ethernet controller")); if (!ether.dhcpSetup()) Serial.println(F("DHCP failed")); ether.printIp("IP: ", ether.myip); ether.printIp("GW: ", ether.gwip); ether.printIp("DNS: ", ether.dnsip); if (!ether.dnsLookup(website)) Serial.println("DNS failed"); ether.printIp("SRV: ", ether.hisip); } void loop () { ether.packetLoop(ether.packetReceive()); if (millis() > timer) { timer = millis() + 5000; Serial.println(); Serial.print("<<< REQ "); ether.browseUrl(PSTR("/comprueba_maq_ON.php?maquina="), "1", website, my_callback); } }

Вассилис
Ср 14 февраля 2018 г. 16:04
Pinging 82.223.11.159 with 32 bytes of data: Request timed out. Request timed out. Request timed out. Request timed out. Ping statistics for 82.223.11.159: Packets: Sent = 4, Received = 0, Lost = 4 (100% loss),

ramgc
Ср 14 февраля 2018 г. 16:15
[Вассилис - Ср 14 февраля 2018 г., 16:04] - Пинг 82.223.11.159 с 32 байтами данных:
Запросить время.
Запросить время.
Запросить время.
Запросить время.

Статистика пинга для 82.223.11.159:
Пакеты: отправлено = 4, получен = 0, потерянный = 4 (потеря 100%),

Я просто вижу, что не пинг... Но PHP работает правильно

помещать http: // 82.223.11.159/CORCMEBA_MAQ_ON.PHP?Макина = 1 и вернуть 1 или 0

Я не знаю, что случится

fpistm
Ср 14 февраля 2018 г., 16:25
Для ENC28J60 я использовал эту LIB, которая теперь поддерживает платы STM32 с версии 2.0.5:
https: // github.com/uipethernet/uipethernet

Вассилис
Ср 14 февраля 2018 г., 17:52
#include #include // ethernet interface mac address, must be unique on the LAN static byte mymac[] = { 0x74,0x69,0x69,0x2D,0x30,0x31 }; byte Ethernet::buffer[700]; static uint32_t timer; const char website[] PROGMEM = "82.223.11.159"; static byte server_ip[] = { 82,223,11,159}; // called when the client request is complete static void my_callback (byte status, uint16_t off, uint16_t len) { Serial.println(">>>"); Ethernet::buffer[off+300] = 0; Serial.print((const char*) Ethernet::buffer + off); Serial.println("..."); } void setup () { Serial.begin(57600); Serial.println(F("\n[webClient]")); if (ether.begin(sizeof Ethernet::buffer, mymac, PA4) == 0) Serial.println(F("Failed to access Ethernet controller")); if (!ether.dhcpSetup()) Serial.println(F("DHCP failed")); ether.printIp("IP: ", ether.myip); ether.printIp("GW: ", ether.gwip); ether.printIp("DNS: ", ether.dnsip); //if (!ether.dnsLookup(website)) // Serial.println("DNS failed"); ether.copyIp(ether.hisip, server_ip); ether.printIp("SRV: ", ether.hisip); } void loop () { ether.packetLoop(ether.packetReceive()); if (millis() > timer) { timer = millis() + 5000; Serial.println(); Serial.print("<<< REQ "); ether.browseUrl(PSTR("/comprueba_maq_ON.php?maquina="), "1", website, my_callback); } }

ramgc
Чт 15 февраля 2018 г. 15:41
[Вассилис - Ср 14 февраля 2018 г., 17:52] - #include #include // ethernet interface mac address, must be unique on the LAN static byte mymac[] = { 0x74,0x69,0x69,0x2D,0x30,0x31 }; byte Ethernet::buffer[700]; static uint32_t timer; const char website[] PROGMEM = "82.223.11.159"; static byte server_ip[] = { 82,223,11,159}; // called when the client request is complete static void my_callback (byte status, uint16_t off, uint16_t len) { Serial.println(">>>"); Ethernet::buffer[off+300] = 0; Serial.print((const char*) Ethernet::buffer + off); Serial.println("..."); } void setup () { Serial.begin(57600); Serial.println(F("\n[webClient]")); if (ether.begin(sizeof Ethernet::buffer, mymac, PA4) == 0) Serial.println(F("Failed to access Ethernet controller")); if (!ether.dhcpSetup()) Serial.println(F("DHCP failed")); ether.printIp("IP: ", ether.myip); ether.printIp("GW: ", ether.gwip); ether.printIp("DNS: ", ether.dnsip); //if (!ether.dnsLookup(website)) // Serial.println("DNS failed"); ether.copyIp(ether.hisip, server_ip); ether.printIp("SRV: ", ether.hisip); } void loop () { ether.packetLoop(ether.packetReceive()); if (millis() > timer) { timer = millis() + 5000; Serial.println(); Serial.print("<<< REQ "); ether.browseUrl(PSTR("/comprueba_maq_ON.php?maquina="), "1", website, my_callback); } }

ramgc
Солнце 18 февраля 2018 г. 8:09
Это сумасшедший...Не работай этот код для меня, я пробую все, но ничего, что -нибудь плохо читается в моем коде, я не знаю, где :(

Вассилис
Пн 19 февраля 2018 г. 9:32 утра
Я постараюсь дать вам еще один базовый пример кода. В новом примере используется новый буфер (BUF) с длиной 2048 байтов. Полученные байты копируются в новый буфер. Если <хвост> переменная больше, чем 0, вы можете прочитать полученные байты.

Как я уже говорил, это очень базовый пример кода и может значительно улучшить (кольцевой буфер и т. Д.).
#include #include // ethernet interface mac address, must be unique on the LAN static byte mymac[] = { 0x74,0x69,0x69,0x2D,0x30,0x31 }; byte Ethernet::buffer[700]; static uint32_t timer; #define MY_BUFFER_SIZE 2048 byte buf[MY_BUFFER_SIZE]; int tail = 0; const char website[] PROGMEM = "82.223.11.159"; static byte server_ip[] = { 82,223,11,159}; // called when the client request is complete static void my_callback (byte status, uint16_t off, uint16_t len) { if((tail + len) < MY_BUFFER_SIZE){ for(int i=0;i 0){ Serial.println(">>>"); for(int i=0;i timer) { timer = millis() + 5000; Serial.println(); Serial.print("<<< REQ "); ether.browseUrl(PSTR("/comprueba_maq_ON.php?maquina="), "1", website, my_callback); } }

ramgc
Вт 20 февраля 2018 г. 8:44
Просто работай сейчас, спасибо, только это за то, чтобы закончить мой proyect.

Отличный форум, спасибо!!

Теперь нужно только обрабатывать все байты :рулон: :ржу не могу: