enc28j60 и browseUrl
- Войдите на сайт для отправки комментариев
Чт, 05/09/2013 - 16:32
Добрый день. Немогу отправить данные в php скрипт с помощью библиотеки EtherCard.h
Вот код
#include <EtherCard.h>
// 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;
//char website[] PROGMEM = "www.google.com";
char website[] PROGMEM = "192.168.1.90";
// called when the client request is complete
static void my_callback (byte status, word off, word len) {
Serial.println(">>>");
Ethernet::buffer[off+300] = 0;
Serial.print((const char*) Ethernet::buffer + off);
Serial.println("...");
}
void setup () {
Serial.begin(9600);
Serial.println("\n[webClient]");
if (ether.begin(sizeof Ethernet::buffer, mymac, 10) == 0)
Serial.println( "Failed to access Ethernet controller");
if (!ether.dhcpSetup())
Serial.println("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("/arduino/logger1.php?pwd=secret"), "", website, my_callback);
}
}
Ардуина получает ip адрес, потом выходит сообщение "DNS failed", пингуется один раз и потом пинг пропадает.
Далее в serial монитор выводится сообщение об отправке, но функция my_callback не вызывается. Со статическим ip тоже самое. Пробовал добавлять
ether.hisip[0] = 192; ether.hisip[1] = 168; ether.hisip[2] = 1; ether.hisip[3] = 90; ether.hisport = 80;
но результата нет :(
Нужна помощь, второй день мозг закипает...
Вам нужно почитать что такое DNS. Тогда станет понятно что если вы уже знаете IP - то вам DNS совсем не нужен. Пример getStaticIP.ino из библиотеки
// remote website ip address and port static byte hisip[] = { 74,125,79,99 };Попробуйте убрать из loop() все кроме
и пробуйте пинговать ее. Стабильно пинги идут?
Всё убрал. Пинг стабильный.
Сорри, не пингуется вообще
У меня были такие танцы из-за питания.
Моя ардуинка - выдавала очень слабый ток на 3.3v пин. Чуть-чего - просаживался. Собрал отдельный регулятор именно для шилда - заработало все стабильно.
Через год - опят начало глючить. Оказалось что ноут от которого все питается начал умирать и выдавать на USB пониженное напряжение. И мой регулятор - уже не мог сделать из него 3.3V. Подключил внешний блок питания - опять все заработало стабильно.
Мне кажется проблема не в питании, потому что другие примеры работают (тот же подправленный backSoon.ino для статического ip, например)
#include <EtherCard.h> // ethernet interface ip address static byte myip[] = { 192,168,1,99 }; // gateway ip address static byte gwip[] = { 192,168,1,20 }; // ethernet mac address - must be unique on your network static byte mymac[] = { 0x74,0x69,0x69,0x2D,0x30,0x31 }; byte Ethernet::buffer[500]; // tcp/ip send and receive buffer char page[] PROGMEM = "HTTP/1.0 503 Service Unavailable\r\n" "Content-Type: text/html\r\n" "Retry-After: 600\r\n" "\r\n" "<html>" "<head><title>" "Service Temporarily Unavailable" "</title></head>" "<body>" "<h3>This service is currently unavailable</h3>" "<p><em>" "The main server is currently off-line.<br />" "Please try again later." "</em></p>" "</body>" "</html>" ; void setup(){ Serial.begin(57600); Serial.println("\n[backSoon]"); ether.begin(sizeof Ethernet::buffer, mymac, 10); ether.staticSetup(myip); } void loop(){ // wait for an incoming TCP packet, but ignore its contents if (ether.packetLoop(ether.packetReceive())) { memcpy_P(ether.tcpOffset(), page, sizeof page); ether.httpServerReply(sizeof page - 1); } delay(100); }Вот так работает. Заметил одну особенность. Если ip статический то пинг порядка 20мс, если динамический то 1мс. Без delay в цикле не пингуется вообще.
Спасибо! Проблема была в питании!
Чтобы не морочиться с 3,3В можно купить Ethernet модуль с установленным регулятором напряжения, который питается от 5 В
Чтобы не морочиться с 3,3В можно купить Ethernet модуль с установленным регулятором напряжения, который питается от 5 В
А еще лучше не покупать этот модуль вообще.