Arduino UNO + Arduino WIFI shield

alexboy
Offline
Зарегистрирован: 11.03.2013

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

Форум не выдал схожим тем, поэтому решил создать новую. Столкнулся со следующей проблемой:

Обновил успешно firmware na wifi shielde (http://www.dfrobot.com/community/how-to-upgrade-arduino-wifi-shield-firm...), подлючае к UNO, загружаю скечт на проверку доступных сетей - через монитор порта - выдаёт, что wifi shield не найден.

Бороздю интернет и пока не нашел ни совета, ни решения, куда тыкнуться или устанановить в чём причина.

alexboy
Offline
Зарегистрирован: 11.03.2013

alexboy пишет:

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

Форум не выдал схожим тем, поэтому решил создать новую. Столкнулся со следующей проблемой:

Обновил успешно firmware na wifi shielde (http://www.dfrobot.com/community/how-to-upgrade-arduino-wifi-shield-firm...), подлючае к UNO, загружаю скечт на проверку доступных сетей - через монитор порта - выдаёт, что wifi shield не найден.

Бороздю интернет и пока не нашел ни совета, ни решения, куда тыкнуться или устанановить в чём причина.

Код следующий:

#include <WiFi.h>

char ssid[] = "yourNetwork";     // the name of your network
int status = WL_IDLE_STATUS;     // the Wifi radio's status

void setup() {
  // initialize serial:
  Serial.begin(9600);

  // attempt to connect to an open network:
  Serial.println("Attempting to connect to open network...");
  status = WiFi.begin(ssid);

  // if you're not connected, stop here:
  if ( status != WL_CONNECTED) {
    Serial.println("Couldn't get a wifi connection");
    while(true);
  }
  // if you are connected :
  else {
      Serial.print("Connected to the network");
  }
}

void loop() {
  // do nothing
}

 

leshak
Offline
Зарегистрирован: 29.09.2011

Вставка программного кода в тему/комментарий

А по теме - вы уверены что он говорит что "wifi shield не найден"? В скетче не видно что-бы он мог такое сказать. Там есть только "не погу подключится к сети".

Вообщем вначале выясните какую именно проблему вам нужно решать: не видит шилд или не подключается к сети.

leshak
Offline
Зарегистрирован: 29.09.2011

Вот этот пример из туториала что выводит?

#include <SPI.h>
#include <WiFi.h>

void setup() {
  // initialize serial and wait for the port to open:
  Serial.begin(9600);
  while(!Serial) ;

  // attempt to connect using WEP encryption:
  Serial.println("Initializing Wifi...");
  printMacAddress();

  // scan for existing networks:
  Serial.println("Scanning available networks...");
  listNetworks();
}

void loop() {
  delay(10000);
  // scan for existing networks:
  Serial.println("Scanning available networks...");
  listNetworks();
}

void printMacAddress() {
  // the MAC address of your Wifi shield
  byte mac[6];                     

  // print your MAC address:
  WiFi.macAddress(mac);
  Serial.print("MAC: ");
  Serial.print(mac[5],HEX);
  Serial.print(":");
  Serial.print(mac[4],HEX);
  Serial.print(":");
  Serial.print(mac[3],HEX);
  Serial.print(":");
  Serial.print(mac[2],HEX);
  Serial.print(":");
  Serial.print(mac[1],HEX);
  Serial.print(":");
  Serial.println(mac[0],HEX);
}

void listNetworks() {
  // scan for nearby networks:
  Serial.println("** Scan Networks **");
  byte numSsid = WiFi.scanNetworks();

  // print the list of networks seen:
  Serial.print("number of available networks:");
  Serial.println(numSsid);

  // print the network number and name for each network found:
  for (int thisNet = 0; thisNet<numSsid; thisNet++) {
    Serial.print(thisNet);
    Serial.print(") ");
    Serial.print(WiFi.SSID(thisNet));
    Serial.print("\tSignal: ");
    Serial.print(WiFi.RSSI(thisNet));
    Serial.print(" dBm");
    Serial.print("\tEncryption: ");
    Serial.println(WiFi.encryptionType(thisNet));
  }
}

 

alexboy
Offline
Зарегистрирован: 11.03.2013

Вот: Binārās skices izmērs: 6 334 baiti (no maksimālajiem 32 256)
Якобы всё ок...

Монитор сериала выдаёт:

Initializing Wifi...
MAC: 0:0:0:0:0:0
Scanning available networks...
** Scan Networks **
number of available networks:0
 

Стоит рутер работаюший. ASUS RT-G32.

toc
Offline
Зарегистрирован: 09.02.2013

на роутере включён скрытый ssid? или beacon interval слишком большой?  другие, незнакомые с этой сетью устройства, видят её? и попробуйте задать менее тривиальный mac.

alexboy
Offline
Зарегистрирован: 11.03.2013

ssid - отключен.

beacon interval = 600.

Незнакомые устройства сеть видят.

MAC изменю.

leshak
Offline
Зарегистрирован: 29.09.2011

alexboy пишет:

MAC изменю.

Кстати, когда-то наткнулся на грабли - не любые 16-тиричные цифры допустимы в мак-адресе.

Что-бы не разбиратся "что-там-допустипо", можно взять MAC скажем и Ethernet туториала

http://arduino.cc/en/Tutorial/WebServer

И еще, традиционное:

1. Проверте качество подключения 
2. Проверте качество питания, если питаетесь от USB - попробуйте внешний блок питания

alexboy
Offline
Зарегистрирован: 11.03.2013

 

Initializing Wifi...
MAC: DE:AD:BE:EF:FE:ED
Scanning available networks...
** Scan Networks **
number of available networks:0
 
1.Качество соединения - проверено.
2.Другие источники питания, пока нету возможности попробовать.
 
 
Так же замкнул  проводом IOREF и 3.3V, тк использую UNO R2.
leshak
Offline
Зарегистрирован: 29.09.2011

Ну хотя-бы померяйте тестером что у вас на 5v пине. Сколько раз я бился лбом об стол... а потом выяснялось что проблема в USB порте ноута...

Еще идеи:

У вас же на шилде есть SD карта? Если да, в скетч поиска сетей попробуйте добавить в начало setup() 

pinMode(4,OUTPUT);
pinMode(10,OUTPUT);

digitalWrite(4,HIGH); // запретили SD
digitalWrite(10,LOW);// включили Wifi

И еще, может те, там же в setup(), до описка сетей, попробовать повызвать encryptionType() с разными занчениями параметров (особенно AUTO). Вдруг оно и на то какого типа сети ищутся влияет. Может оно, по дефолту, только отрытые сети ищит.

А еще, я надеюсь, вы у вас ничего кроме шилда счас не подключено? ну вообще ничего... ни единого проводочка/кнопки/диода? Особенно к D7 пину?

 

 

alexboy
Offline
Зарегистрирован: 11.03.2013

На шилде разъём для карты SD имеется, но карты в нём нету.

Ну как, у меня дуина R2 подлюченная через усб, к ней сверху шилд с замкнутым IOREF и 3.3V. Всё.

 

 

leshak
Offline
Зарегистрирован: 29.09.2011

 

alexboy пишет:

На шилде разъём для карты SD имеется, но карты в нём нету.

А вы все равно попробуйте. Что вы теряете? Четыре строчки скопипастать? И encryptionType() попробуйте.

И еще, вы после прошивки джампер с DFU не забыли отключить? Даже если сняли - посмотрите внимательно, бывает что "пласмаска снялась", а сама проволочка-перемычка - осталась. Тогда - пинцет в руки.
alexboy
Offline
Зарегистрирован: 11.03.2013

Потерять точно не потеряю попробовал сделать. 

Initializing Wifi...
MAC: DE:AD:BE:EF:FE:ED
Scanning available networks...
** Scan Networks **
number of available networks:0
Encryption Type:0
 
Джампер снят. Контакты голенькие. Вот код, может я торможу просто?
#include <SPI.h>
#include <WiFi.h>

void setup() {
    pinMode(4,OUTPUT);
    pinMode(10,OUTPUT);

    digitalWrite(4,HIGH); // запретили SD
    digitalWrite(10,LOW);// включили Wifi

  // initialize serial and wait for the port to open:
  Serial.begin(9600);
  while(!Serial) ;


  // attempt to connect using WEP encryption:
  Serial.println("Initializing Wifi...");
  printMacAddress();

  // scan for existing networks:
  Serial.println("Scanning available networks...");
  listNetworks();
  
   byte encryption = WiFi.encryptionType(8);
  Serial.print("Encryption Type:");
  Serial.println(encryption,HEX);
}

void loop() {
  delay(10000);
  // scan for existing networks:
  Serial.println("Scanning available networks...");
  listNetworks();
}

void printMacAddress() {
  // the MAC address of your Wifi shield
  byte mac[6];                     

  // print your MAC address:
  WiFi.macAddress(mac);
  Serial.print("MAC: ");
  Serial.print(mac[5]=0xDE ,HEX);
  Serial.print(":");
  Serial.print(mac[4]=0xAD,HEX);
  Serial.print(":");
  Serial.print(mac[3]=0xBE,HEX);
  Serial.print(":");
  Serial.print(mac[2]=0xEF,HEX);
  Serial.print(":");
  Serial.print(mac[1]=0xFE,HEX);
  Serial.print(":");
  Serial.println(mac[0]=0xED,HEX);
}

void listNetworks() {
  // scan for nearby networks:
  Serial.println("** Scan Networks **");
  byte numSsid = WiFi.scanNetworks();

  // print the list of networks seen:
  Serial.print("number of available networks:");
  Serial.println(numSsid);

  // print the network number and name for each network found:
  for (int thisNet = 0; thisNet<numSsid; thisNet++) {
    Serial.print(thisNet);
    Serial.print(") ");
    Serial.print(WiFi.SSID(thisNet));
    Serial.print("\tSignal: ");
    Serial.print(WiFi.RSSI(thisNet));
    Serial.print(" dBm");
    Serial.print("\tEncryption: ");
    Serial.println(WiFi.encryptionType(thisNet));
  }
}
leshak
Offline
Зарегистрирован: 29.09.2011

Да не, вропде все правильно сделали.

А если

Serial.print("version=");
Serial.println( WiFi.firmwareVersion());

Сделать?

Выведет что-то вразумительное или опять нули?

alexboy
Offline
Зарегистрирован: 11.03.2013

 

Опять нули..
 
Initializing Wifi...
MAC: DE:AD:BE:EF:FE:ED
Scanning available networks...
** Scan Networks **
number of available networks:0
version=
Scanning available networks...
** Scan Networks **
 
alexboy
Offline
Зарегистрирован: 11.03.2013

2. Проверте качество питания, если питаетесь от USB - попробуйте внешний блок питания

 

Глупый вопрос: когда подлючу к внешнему блоку питанию, как я проверю, исправно ли работает дуина?

leshak
Offline
Зарегистрирован: 29.09.2011

>Опять нули..

Похоже сам шилд не видит.

>как я проверю, исправно ли работает дуина?
Да так же как и от USB проверяли. ПУстите опять скетч и посмотрите обнаруживают ли сети.

Если вопрос "а работает ли сама дуина", то траниционно любой камень проверяется заливкой скетча Blink (снимаете шилд, заливаете Blink смотрите мигает ли диод с частотой 1 герц). 
 

alexboy
Offline
Зарегистрирован: 11.03.2013

leshak пишет:

Да так же как и от USB проверяли. ПУстите опять скетч и посмотрите обнаруживают ли сети.

Если вопрос "а работает ли сама дуина", то траниционно любой камень проверяется заливкой скетча Blink (снимаете шилд, заливаете Blink смотрите мигает ли диод с частотой 1 герц). 
 

Подключил к адаптеру, пустил скетч - просит указать COM порт. и потом выдаёт:

avrdude: stk500_getsync(): not in sync: resp=0x00

С дуиной уже игрался, Blink работал, выставлял разные периоды свечения - всё ок.

Snubist
Offline
Зарегистрирован: 18.02.2013

Уже обсуждалось. При питании от адаптера, USB порт компа не увидит дуину. Поэтому счетч нужно заливать без адаптера.

leshak
Offline
Зарегистрирован: 29.09.2011

alexboy пишет:

Подключил к адаптеру, пустил скетч - просит указать COM порт. и потом выдаёт:

Подождите, когда и зачем у нас появился новый элемент адаптер? Зачем вносить дополнительные неизвестные и шансы ошибится? Для начала - только одно изменение. Блок питания от 7 до 12 вольт (лучше 9v), в разъем внешнего питания. Примерно на 500ma, или, что-бы с хорошим запасом на 1A, что-бы уж точно хватило (хотя, конечно если дуина+шилд потребляют больше 500 ma - скорее всего где-то что-то сгорело/замкнуло).

alexboy пишет:

avrdude: stk500_getsync(): not in sync: resp=0x00

Ну это говорит о том, что вы не просто пустили залитый скетч, а еще и пытались заливать через адаптер (неудачно). Причин почему "неудачно" может быть масса. Авторесет, RX/TX перепутали, дравера, не тот порт и т.д. и т.п. Вообщем можно сильно уплыть в сторону. А у нас счас одна задача - просто убедится что шилду хватает питания. Убедится в этом мы может либо померяв что у нас на 5v пине (если там 4.8, 4.9 и просадок не наблюдается - значит дело не в питании), либо взяв внешний блок и попробовав "не глядя". Если проблемы останутся, то мы предполагаем что маловероятно что и USB и блок одновременно дают плохое питание. А значит - проблема в чем-то другом. Если проблемы исчезнут - значит проблемы была в питании.

alexboy пишет:

С дуиной уже игрался, Blink работал, выставлял разные периоды свечения - всё ок.

Ну то что "сама дуина работает" - понятно по тому что вас в Serial монитор данные бегут. Вы просто спросили "как проверить при внешнем блоке". Ну значит заливаете Blink подключаете внешний блок, выдергиваете USB. Если блинк продолжает работать - значит дуина нормально живет от внешнего блока. Подключаем USB, заливаем скетч скана сетей и смотрим что он видит. При этом подключены одновременно и USB (штатный, не адаптер) и блок питания.

leshak
Offline
Зарегистрирован: 29.09.2011

Snubist пишет:

Уже обсуждалось. При питании от адаптера, USB порт компа не увидит дуину.

Думаю тогда было-бы не not in sync, а "порт не подключен". IMHO более вероятны проблемы с ресетом. К тому же "при внешнем блоке не видит дуину" - это скорее исключение/заглюки конкретных материнок. У меня, к примеру, комп спокойно видит дуину при питании от внешнего блока. И кстати, вот у меня как раз такая ситуаци когда "внешний блок нужен". Ноут старый, на USB выдает пониженное напряжение. На 5v пине у меня, при питании от USB стоит 4.5v и меньше.  И некоторые шилды "глючат", не хватает им питания, пока не подключешь внешний блок. Тогда на 5v, образуется 4.9v и все рабоатет стабильно.

alexboy
Offline
Зарегистрирован: 11.03.2013

leshak пишет:

Если блинк продолжает работать - значит дуина нормально живет от внешнего блока. Подключаем USB, заливаем скетч скана сетей и смотрим что он видит. При этом подключены одновременно и USB (штатный, не адаптер) и блок питания.

Blink работает от внешнего блока питания. Подключил USB, залил скетч, подключил блок питания: 12V; 1A

та же самая песня. Всё по 0.

alexboy
Offline
Зарегистрирован: 11.03.2013

Пошёл я официальному представителю, где покупал дуиновские штучки. Рассказал сколько варинтов уже было проверено..... Ответили, что должно работать! Ага.

Начал тыкаться работник, оказывается сам wifi shield хреного собран. Гдето контакты врут.  Зажимал какую то часть платы - видит сети, отпускал - сеть пропадала......

Вот так вот и покупай у оф. представителей за 150 баксов. Жду новый wifi shield.

leshak
Offline
Зарегистрирован: 29.09.2011

alexboy пишет:

Пошёл я официальному представителю, где покупал дуиновские штучки. Рассказал сколько варинтов уже было проверено..... 

Ну значит не зря время тратили

alexboy пишет:

Вот так вот и покупай у оф. представителей за 150 баксов. Жду новый wifi shield.

На самом деле это как раз довод "за" этого продавца. Во первых - таки понимает что продает, а не просто "купи-продай". Во вторых - готов участвовать в решении проблемы. В третьих - я же так понял отбрыкиватся от замены не стал? А брак - ну так везде он бывает. И при изготовлении, и при транспортировке и при эксплуатации.

alexboy
Offline
Зарегистрирован: 11.03.2013

leshak пишет:

 В третьих - я же так понял отбрыкиватся от замены не стал?

Не стал.... теперь только ждать. На Нный период времени проект у меня встал.

leshak
Offline
Зарегистрирован: 29.09.2011

Или наоборот. Шанс освоить слабо-связанную архитектуру. Не может же быть, что-бы весь проект только из работы с WifFi состоял.

Парсинг всяких комманд, опрос датчиков и т.п. - вполне можно делать. Делаем какой-то слой Connector. У него может быть несколько реализаций. SerialConnector, WifiConnector или даже FakeConnector (с какими-то заранее захардкоженными наборами тестовых посылок/ответов) и т.п. Более того, я часто так делаю даже когда все железо есть в наличии.

Во первых - легче тестить. Тестируешь отдельно бизнес-логику, отдельно - связь, отдельно - работу с датчиками. Во вторых если потом, к примеру потребовалось гнать данные через EthernetShiled - ну просто реализовать еще один вид коннектора. А весь остальной отлаженный скетч - не трогается.
Да и банально - сам код получается четче-прозначней. Заставляет писать в менее связанном стиле. Отделять мухи и котлеты.

toc
Offline
Зарегистрирован: 09.02.2013

alexboy, моё предложение поменять мак адрес вы поняли неправильно. Вы сделали только вывод на экран желаемого адреса. 

Верните строки с serial.print в первоначальное состояние.

А строку с объявлением массива дополните инициализатором:

byte mac[6] = {0xDE, 0xAD ... };

toc
Offline
Зарегистрирован: 09.02.2013

я, вероятно, не прав. В доках написано, что WiFi.macAddress - получает мак адрес. А как же его задавать? 

Я думал, что тут по аналогии с эзернет модулями: в начале работы нужно задать мак-адрес.

leshak
Offline
Зарегистрирован: 29.09.2011

toc пишет:

Я думал, что тут по аналогии с эзернет модулями: в начале работы нужно задать мак-адрес.

Нет. В самой библиотеке нет такой возможности. Похоже MAC зашит в саму firmware шилда или вообще в самом чипе. 

Если очень хочется - можно порытся/пересобрать прошивку. Вот ее исходинк https://github.com/arduino/wifishield/tree/master/firmware

Или раскурить даташит чипа http://www.hd-wireless.se/index.php?option=com_content&view=article&id=49%3Ahdg104-details&catid=3%3Acontent&Itemid=1  (но для скачивания даташита они хотят регистрации - мне вломно).

Да и вообщем-то раз "при нажатии пальцем заработало" - значит дело было не в маке, а какой-то микротрещене платы или непропае (можно попросить ремонтников-мобильщиков феном погреть плату). Но можно и с маком заморочится, если есть спортивный интересс.

alexboy
Offline
Зарегистрирован: 11.03.2013

leshak пишет:

Парсинг всяких комманд, опрос датчиков и т.п. - вполне можно делать. Делаем какой-то слой Connector. У него может быть несколько реализаций. SerialConnector, WifiConnector или даже FakeConnector (с какими-то заранее захардкоженными наборами тестовых посылок/ответов) и т.п. Более того, я часто так делаю даже когда все железо есть в наличии.

 Отделять мухи и котлеты.

И в правду.. погорячился я.