Форум программистов, компьютерный форум, киберфорум
Arduino
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.95/22: Рейтинг темы: голосов - 22, средняя оценка - 4.95
0 / 0 / 0
Регистрация: 23.05.2015
Сообщений: 2
1

Arduino Uno+W5100+Android

23.05.2015, 18:14. Показов 4124. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Помогите пожалуйста разобраться.
У меня есть Arduino uno и W5100.
Хочу подключить к ардуино датчики температуры и управлять пинами.
Все это дело хочу мониторить телефоном на андроиде, через интернет, из любой точки города.

Вдохновлялся вот этим видео

Вот только автор видео использует ENC28J60 Module, а у меня W5100.
И как слепить это в кучу мне непонятно.
Очень прошу помощи, буду благодарен любому совету!

Скетч автора
Кликните здесь для просмотра всего текста
/* Дмитрий Осипов. http://www.youtube.com/user/d36073?feature=watch
v.01 Управляем Arduino с Web страницы Webserver Ethernet ENC28J60 Enternet HR911105A Pin ON OF Relays.
-----
Что нам понадобится:
1). ENC28J60 Ethernet LAN / Network Module.
http://www.ebay.com/sch/i.html... c&LH_BIN=1

2). Библиотека / Library - "ethercard".
EtherCard is a driver for the ENC28J60 chip, compatible with Arduino IDE.
https://github.com/jcw/ethercard
или берем здесь. https://yadi.sk/d/R57sVoglbhTRN
3).
Скачать sketch.
v.01 Управляем Arduino с Web страницы Webserver Ethernet ENC28J60 Enternet HR911105A Pin ON OF Relays.

-----------------------

Подключаем Pins "ENC28J60 Module" к Arduino Uno.
VCC - 3.3V
GND - GND
SCK - Pin 13
SO - Pin 12
SI - Pin 11
CS - Pin 10 Можно выбрать любой.

Подключаем "ENC28J60 Module" например к Router, загружаем sketch, открываем страницу
в браузере например 192.168.1.222 , на странице можем включать выключат Pins / реле.
---------
Примечание: "ENC28J60 Module" питается от 3.3 volts, и потребляет по документации 250mA.
Arduino Uno Максимальный допустимый ток, получаемый с 3V3 контакта — 50 мА.
У меня прекрасно всё работает с 3V3 контакта Arduino Uno.
На всякий случай, предупреждаю.
------------------
*/

#include <EtherCard.h> // Подключаем скачанную библиотеку. https://yadi.sk/d/R57sVoglbhTRN

// MAC Address должен быть уникальным в вашей сети. Можно менять.
static byte mymac[] = {
0x5A,0x5A,0x5A,0x5A,0x5A,0x5A };

// ip статический / постоянный Address нашей Web страницы.
static byte myip[] = {
192,168,1,222 };

// Буфер, чем больше данных на Web странице, тем больше понадобится значения буфера.
byte Ethernet::buffer[900];
BufferFiller bfill;

// Массив задействованных номеров Pins Arduino, для управления например 8 реле.
int LedPins[] = {
2,3,4,5,6,7,8,9};

// Массив для фиксации изменений.
boolean PinStatus[] = {
1,2,3,4,5,6,7,8};

//-------------

const char http_OK[] PROGMEM =
"HTTP/1.0 200 OK\r\n"
"Content-Type: text/html\r\n"
"Pragma: no-cache\r\n\r\n";

const char http_Found[] PROGMEM =
"HTTP/1.0 302 Found\r\n"
"Location: /\r\n\r\n";

const char http_Unauthorized[] PROGMEM =
"HTTP/1.0 401 Unauthorized\r\n"
"Content-Type: text/html\r\n\r\n"
"<h1>401 Unauthorized</h1>";

//------------

// Делаем функцию для оформления нашей Web страницы.
void homePage()
{
bfill.emit_p(PSTR("$F"
"<title>ArduinoPIN Webserver</title>"
"ArduinoPIN 1: <a href=\"?ArduinoPIN1=$F\">$F</a><br />"
"ArduinoPIN 2: <a href=\"?ArduinoPIN2=$F\">$F</a><br />"
"ArduinoPIN 3: <a href=\"?ArduinoPIN3=$F\">$F</a><br />"
"ArduinoPIN 4: <a href=\"?ArduinoPIN4=$F\">$F</a><br />"
"ArduinoPIN 5: <a href=\"?ArduinoPIN5=$F\">$F</a><br />"
"ArduinoPIN 6: <a href=\"?ArduinoPIN6=$F\">$F</a><br />"
"ArduinoPIN 7: <a href=\"?ArduinoPIN7=$F\">$F</a><br />"
"ArduinoPIN 8: <a href=\"?ArduinoPIN8=$F\">$F</a>"),

http_OK,
PinStatus[1]?PSTR("off"):PSTR("on"),
PinStatus[1]?PSTR("<font color=\"green\"><b>ON</b></font>"):PSTR("<font color=\"red\">OFF</font>"),
PinStatus[2]?PSTR("off"):PSTR("on"),
PinStatus[2]?PSTR("<font color=\"green\"><b>ON</b></font>"):PSTR("<font color=\"red\">OFF</font>"),
PinStatus[3]?PSTR("off"):PSTR("on"),
PinStatus[3]?PSTR("<font color=\"green\"><b>ON</b></font>"):PSTR("<font color=\"red\">OFF</font>"),
PinStatus[4]?PSTR("off"):PSTR("on"),
PinStatus[4]?PSTR("<font color=\"green\"><b>ON</b></font>"):PSTR("<font color=\"red\">OFF</font>"),
PinStatus[5]?PSTR("off"):PSTR("on"),
PinStatus[5]?PSTR("<font color=\"green\"><b>ON</b></font>"):PSTR("<font color=\"red\">OFF</font>"),
PinStatus[6]?PSTR("off"):PSTR("on"),
PinStatus[6]?PSTR("<font color=\"green\"><b>ON</b></font>"):PSTR("<font color=\"red\">OFF</font>"),
PinStatus[7]?PSTR("off"):PSTR("on"),
PinStatus[7]?PSTR("<font color=\"green\"><b>ON</b></font>"):PSTR("<font color=\"red\">OFF</font>"),
PinStatus[8]?PSTR("off"):PSTR("on"),
PinStatus[8]?PSTR("<font color=\"green\"><b>ON</b></font>"):PSTR("<font color=\"red\">OFF</font>"));
}

//------------------------



void setup()
{
Serial.begin(9600);

// По умолчанию в Библиотеке "ethercard" (CS-pin) = № 8.
// if (ether.begin(sizeof Ethernet::buffer, mymac) == 0).
// and change it to: Меняем (CS-pin) на 10.
// if (ether.begin(sizeof Ethernet::buffer, mymac, 10) == 0).

if (ether.begin(sizeof Ethernet::buffer, mymac,10) == 0);

if (!ether.dhcpSetup());

// Выводим в Serial монитор IP адрес который нам автоматический присвоил наш Router.
// Динамический IP адрес, это не удобно, периодический наш IP адрес будет меняться.
// Нам придётся каждый раз узнавать кой адрес у нашей страницы.
ether.printIp("My Router IP: ", ether.myip); // Выводим в Serial монитор IP адрес который нам присвоил Router.

// Здесь мы подменяем наш динамический IP на статический / постоянный IP Address нашей Web страницы.
// Теперь не важно какой IP адрес присвоит нам Router, автоматический будем менять его, например на "192.168.1.222".
ether.staticSetup(myip);

ether.printIp("My SET IP: ", ether.myip); // Выводим в Serial монитор статический IP адрес.
//-----

for(int i = 0; i <= 8; i++)
{
pinMode(LedPins[i],OUTPUT);
PinStatus[i]=false;
}
}

// --------------------------------------

void loop()
{

delay(1); // Дёргаем микроконтроллер.

word len = ether.packetReceive(); // check for ethernet packet / проверить ethernet пакеты.
word pos = ether.packetLoop(len); // check for tcp packet / проверить TCP пакеты.

if (pos) {
bfill = ether.tcpOffset();
char *data = (char *) Ethernet::buffer + pos;
if (strncmp("GET /", data, 5) != 0) {
bfill.emit_p(http_Unauthorized);
}
else {

data += 5;
if (data[0] == ' ') {
homePage(); // Return home page Если обнаружено изменения на станице, запускаем функцию.
for (int i = 0; i <= 7; i++)digitalWrite(LedPins[i],PinStatus[i+1]);
}

// "16" = количество символов "?ArduinoPIN1=on ".
else if (strncmp("?ArduinoPIN1=on ", data, 16) == 0) {
PinStatus[1] = true;
bfill.emit_p(http_Found);
}
else if (strncmp("?ArduinoPIN2=on ", data, 16) == 0) {
PinStatus[2] = true;
bfill.emit_p(http_Found);
}
else if (strncmp("?ArduinoPIN3=on ", data, 16) == 0) {
PinStatus[3] = true;
bfill.emit_p(http_Found);
}
else if (strncmp("?ArduinoPIN4=on ", data, 16) == 0) {
PinStatus[4] = true;
bfill.emit_p(http_Found);
}
else if (strncmp("?ArduinoPIN5=on ", data, 16) == 0) {
PinStatus[5] = true;
bfill.emit_p(http_Found);
}
else if (strncmp("?ArduinoPIN6=on ", data, 16) == 0) {
PinStatus[6] = true;
bfill.emit_p(http_Found);
}
else if (strncmp("?ArduinoPIN7=on ", data, 16) == 0) {
PinStatus[7] = true;
bfill.emit_p(http_Found);
}
else if (strncmp("?ArduinoPIN8=on ", data, 16) == 0) {
PinStatus[8] = true;
bfill.emit_p(http_Found);
}


//------------------------------------------------------


else if (strncmp("?ArduinoPIN1=off ", data, 17) == 0) {
PinStatus[1] = false;
bfill.emit_p(http_Found);
}
else if (strncmp("?ArduinoPIN2=off ", data, 17) == 0) {
PinStatus[2] = false;
bfill.emit_p(http_Found);
}
else if (strncmp("?ArduinoPIN3=off ", data, 17) == 0) {
PinStatus[3] = false;
bfill.emit_p(http_Found);
}
else if (strncmp("?ArduinoPIN4=off ", data, 17) == 0) {
PinStatus[4] = false;
bfill.emit_p(http_Found);
}
else if (strncmp("?ArduinoPIN5=off ", data, 17) == 0) {
PinStatus[5] = false;
bfill.emit_p(http_Found);
}
else if (strncmp("?ArduinoPIN6=off ", data, 17) == 0) {
PinStatus[6] = false;
bfill.emit_p(http_Found);
}
else if (strncmp("?ArduinoPIN7=off ", data, 17) == 0) {
PinStatus[7] = false;
bfill.emit_p(http_Found);
}
else if (strncmp("?ArduinoPIN8=off ", data, 17) == 0) {
PinStatus[8] = false;
bfill.emit_p(http_Found);
}


//---------------------------


else {
// Page not found
bfill.emit_p(http_Unauthorized);
}
}
ether.httpServerReply(bfill.position()); // send http response
}
}





0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
23.05.2015, 18:14
Ответы с готовыми решениями:

Arduino UNO + Ethernet Shield W5100 + ?
Здравствуйте. Решил для себя, дабы получше узнать о микроконтроллерах, сделать вот такую вот...

UNO + W5100 зависает и не отвечает по сети
Добрый день, вот такая штука у меня. Блок стоит в работе на воротах на даче. Постоянно проблема уже...

Можно ли подключить одновременно к UNO (W5100 LAN + RF считыватель)?
Можно ли подключить одновременно к UNO (W5100 LAN + RF считыватель)? Этот вопрос встал после...

Arduino UNO. Как работать c RFID-сканнером и Arduino на одном Serial-порту?
Рас уж тут речь зашла об ардуине и многопоточности COM порта, думаю могу обратиться именно сюда за...

3
10231 / 6609 / 498
Регистрация: 28.12.2010
Сообщений: 21,156
Записей в блоге: 1
23.05.2015, 19:49 2
...старо и неактуально. Используйте ESP8266, писать программы можно прямо в ней, WEB сервер свой можно поднять как в режиме AP и подключаться напрямую, так и отправлять данные другим серверам без всяких буратин по Wi-Fi через домашний роутер.

Вдохновитесь лучше этим.
1
0 / 0 / 0
Регистрация: 23.05.2015
Сообщений: 2
23.05.2015, 20:38  [ТС] 3
Спасибо за совет, но на данный момент у меня есть только выше перечисленное оборудование, и необходимо решить задачу используя именно его. Проблема на сколько я понимаю, состоит в изменении кода, если кто-то подскажет как правильно и грамотно его изменить, то это оборудование тоже заработает.. надеюсь
0
10231 / 6609 / 498
Регистрация: 28.12.2010
Сообщений: 21,156
Записей в блоге: 1
24.05.2015, 07:37 4
...мда. Проблема в том, что вы пытаетесь решить проблему кодом без понимания самого железа. Открыть референц-мануал не? Для работы с W5100 есть готовая либа и класс Ethernet - http://www.arduino.cc/en/Reference/Ethernet, как раз под уно и мегу оптимизирована.
0
24.05.2015, 07:37
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
24.05.2015, 07:37
Помогаю со студенческими работами здесь

Arduino uno + arduino ethernet + delphi для чайников
Доброго времени суток. У меня такая задача нужно реализовать программу на Delphi которая...

Arduino UNO + HC-06. RX
Подключаю модуль HC-06, питание HC-06 от отдельного источника 4.8В. ножки RX и TX модуля, в TX и RX...

Arduino uno
Нужна схема структурная Arduino Uno,перелопатил кучу сайтов,только принципиальные,может кто находил?

подключение arduino uno
Всем привет! Недавно пришла (а точнее пришли) плата Ардуино Уно. Думал ща врублю ролики на ютубе по...

Задания по Arduino Uno
Схема Arduino Uno: Задания: 1). Поменяйте программу так, чтобы вместо символов «0-9»...

Работа с Arduino Uno
Здравствуйте. Я не так давно начал учиться программированию плат от Arduino. По совету приобрел я...

Китайский Arduino Uno
Всем приветы о великие ардуинщики) Нужна ваша помощь в осмыслении! Пришла ардуина с ТаоБао, так вот...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru