Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту

AVR Раздел по микроконтроллерам компании Atmel - AVR / ATtiny / ATmega / ATMega128 / ATxmega, вопросы по программированию в AVR studio и все, относящееся к AVR...

 
Опции темы
Непрочитано 30.11.2014, 13:02  
Samuyl
Частый гость
 
Регистрация: 04.10.2007
Сообщений: 22
Сказал спасибо: 13
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
Samuyl на пути к лучшему
По умолчанию Ардуино и Делфи

Доброго времени суток. Недавно я купил 2 платы Ардуино Мега2560 и Итернет шилд к ней. Пытаюсь связать комп и Ардуинину по Итернет соединению. Пока получается не очень... Вот код для ардуино:

#include ‹SPI.h›
#include ‹Ethernet.h›

byte mac[] = { 0xAA, 0xAB, 0xAC, 0xAD, 0xAE, 0xAF};//MAC - адрес ШИЛДА
IPAddress ip(192,168,1,5);//IP - ШИЛДА

EthernetServer server(80);//Порт который использует браузер
void setup()
{
// запускаем Ethernet соединение и сервер:
Ethernet.begin(mac, ip);
server.begin();
}

void loop()
{
EthernetClient client = server.available();// ожидание подключения
if (client)
{ // HTTP запрос заканчивается пустой строкой
boolean currentLineIsBlank = true;
while (client.connected())
{
if (client.available())
{
char c = client.read();
if (c == '\n' && currentLineIsBlank)
{
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println();
//Теперь введите IP-адрес назначенный Arduino в //адресной строке браузера.
//Лучше использовать чистую вкладку, т.к //страница сразу забьётся числами
//Данные пойдут от шилда, он будет работать как //генератор
for(byte x = 0; x ‹= 255; x++)
{
client.println( x );
delay(10);
}
break;
}

if (c == '\n')
{
currentLineIsBlank = true;// начало новой строки
}
else
if (c != '\r')
{
currentLineIsBlank = false;// получили символ в //текущей строке
}
}
}
delay(10);//Небольшая задержка, чтобы дать время браузеру //для получения данных
client.stop();// закрываем соединение
}
}

И соответственно код для Делфи:

procedure TForm1.FormCreate(Sender: TObject);
begin
Form1.Memo1.Lines.Add('['+TimeToStr(Time)+'] Сервер создан');
Form1.Memo1.Lines.Add('['+TimeToStr(Time)+'] Ожидание соединения...');
Form1.Caption := 'Соединение с клиентом...';

try
Form1.ServerSocket1.Active := true;
Form1.ClientSocket1.Address := '192.168.1.5';
Form1.ClientSocket1.Active := true;
Form1.ClientSocket1.Socket.SendText('\n');
except
end;
end;

procedure TForm1.ServerSocetClientConnect(Sender: TObject; Socket: TCustomWinSocket);
begin
Form1.Memo1.Lines.Add('Ждём...');
Form1.Memo1.Lines.Add('[' + TimeToStr(Time) + ']' + ' подключился компьютер ' + socket.RemoteHost);
end;

procedure TForm1.ServerSocetClientRead(Sender: TObject; Socket: TCustomWinSocket);
begin
Form1.Memo1.Lines.Add(Socket.ReceiveText());
end;

Ничего тут непонятного нет, код простой. И не работает. Причём если я делаю запрос через браузер, то всё работает, а как получить такой же запрос на делфи? Спасибо.
Реклама:
__________________
Головой ДУМАТЬ надо, а не гвозди забивать!
Samuyl вне форума  
Непрочитано 30.11.2014, 13:09  
Ara41
Почётный гражданин KAZUS.RU
 
Регистрация: 30.09.2006
Сообщений: 1,560
Сказал спасибо: 158
Сказали Спасибо 661 раз(а) в 431 сообщении(ях)
Ara41 на пути к лучшему
По умолчанию Re: Ардуино и Делфи

порт не назначен в делфи. Или его не видно тут. Дайте проект целиком.
Ara41 вне форума  
Непрочитано 30.11.2014, 13:21  
Samuyl
Частый гость
 
Регистрация: 04.10.2007
Сообщений: 22
Сказал спасибо: 13
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
Samuyl на пути к лучшему
По умолчанию Re: Ардуино и Делфи

Сообщение от Ara41 Посмотреть сообщение
порт не назначен в делфи. Или его не видно тут. Дайте проект целиком.
Порт такой же - 80.
Вложения:
Тип файла: rar Server3.rar (175.8 Кб, 52 просмотров)
__________________
Головой ДУМАТЬ надо, а не гвозди забивать!
Samuyl вне форума  
Непрочитано 30.11.2014, 14:31  
Ara41
Почётный гражданин KAZUS.RU
 
Регистрация: 30.09.2006
Сообщений: 1,560
Сказал спасибо: 158
Сказали Спасибо 661 раз(а) в 431 сообщении(ях)
Ara41 на пути к лучшему
По умолчанию Re: Ардуино и Делфи

Сообщение от Samuyl Посмотреть сообщение
Порт такой же - 80.
у Вас в проекте установлен порт 12345
Ara41 вне форума  
Непрочитано 30.11.2014, 14:36  
raxp
Почётный гражданин KAZUS.RU
 
Регистрация: 28.05.2010
Сообщений: 1,118
Сказал спасибо: 150
Сказали Спасибо 604 раз(а) в 310 сообщении(ях)
raxp на пути к лучшему
По умолчанию Re: Ардуино и Делфи

Единственное где у вас назначен порт для клиента, это в файле описания структуры dfm:
Цитата:
object ClientSocket1: TClientSocket
Active = False
ClientType = ctNonBlocking
Port = 12345
и он явно не 80. Порт ардуньи какой, 80 или 12345?

Ардуина - сервер, программа на Delphi - клиент.

И должно быть так:
Код:
// реализация запроса данных с WEB сервера, триггерный запрос
procedure Tf.on_tmr(Sender: TObject);
begin
 if i = 0 then begin // пробуем соединиться
  cs.Host:= '192.168.1.5';
  cs.Port:= порт ардуньи;
  cs.Active:= true;
 end;

 // если соединились, шлем запрос 
 if (i=1)and(cs.Active) then
   cs.Socket.SendText('\n');

 // отключаемся-
 if i=2 then cs.Active:= false;

 // инкрементируем счетчик триггера
 inc(i); if i›2 then i:=0
end;
__________________
Белорусский журнал «Радиолюбитель»
Youtube LaboratoryW
UR3QQJ

Последний раз редактировалось raxp; 30.11.2014 в 14:38.
raxp вне форума  
Непрочитано 02.12.2014, 20:02  
Samuyl
Частый гость
 
Регистрация: 04.10.2007
Сообщений: 22
Сказал спасибо: 13
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
Samuyl на пути к лучшему
По умолчанию Re: Ардуино и Делфи

Сообщение от raxp Посмотреть сообщение
Код:
// реализация запроса данных с WEB сервера, триггерный запрос
procedure Tf.on_tmr(Sender: TObject);
begin
if i = 0 then begin // пробуем соединиться
cs.Host:= '192.168.1.5';
cs.Port:= порт ардуньи;
cs.Active:= true;
end;
// если соединились, шлем запрос
if (i=1)and(cs.Active) then
cs.Socket.SendText('\n');
// отключаемся-
if i=2 then cs.Active:= false;
// инкрементируем счетчик триггера
inc(i); if i›2 then i:=0
end;

Нет. Этот код не помог. К тому-же я не пойму смысл переменной i. Я так думаю, на Делфи нужно сформировать http запрос, так как это делает браузер. Ведь "\n" имеет какую-то смысловую нагрузку, но что это означает?
__________________
Головой ДУМАТЬ надо, а не гвозди забивать!
Samuyl вне форума  
Непрочитано 03.12.2014, 01:19  
raxp
Почётный гражданин KAZUS.RU
 
Регистрация: 28.05.2010
Сообщений: 1,118
Сказал спасибо: 150
Сказали Спасибо 604 раз(а) в 310 сообщении(ях)
raxp на пути к лучшему
По умолчанию Re: Ардуино и Делфи

...смеетесь что-ли Вам показан рабочий пример (из моего клиента к WEB термометру, с вашей вставкой перевода строки) как можно работать с сокетом, а что вы там посылать будете - это дело сугубо ваше, ибо у вас стоит в ардунье обработчик c проверкой:
Код:
char c = client.read();
 if (c == '\n' && currentLineIsBlank)
И да, нет ответа по портам от вас.

Цитата:
К тому-же я не пойму смысл переменной i
смысл в том, чтобы не ставить обработчик соединения, а проверять статус соединения с сервером асинхронно в тиках таймера: настроили-активировали сокет, проверили соединение с сервером - отправили что-то, закрыли сокет. Период тиков также служит своего рода таймаутом ожидания (после которого прием закрывать, для каналов связи с большой задержкой).
__________________
Белорусский журнал «Радиолюбитель»
Youtube LaboratoryW
UR3QQJ

Последний раз редактировалось raxp; 03.12.2014 в 01:28.
raxp вне форума  
Непрочитано 03.12.2014, 10:00  
Samuyl
Частый гость
 
Регистрация: 04.10.2007
Сообщений: 22
Сказал спасибо: 13
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
Samuyl на пути к лучшему
По умолчанию Re: Ардуино и Делфи

Сообщение от raxp Посмотреть сообщение
И да, нет ответа по портам от вас.
Порты настроил - и в Ардуине и в Делфи. Порт = 80, айпишник = 192.168.1.5. Очень хороший результат получился при использовании WebBrowser на вкладке Internet. Пример в дополнении.
Вложения:
Тип файла: rar Server2.rar (231.4 Кб, 56 просмотров)
__________________
Головой ДУМАТЬ надо, а не гвозди забивать!
Samuyl вне форума  
 

Закладки
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Быстро проверить исправность Ардуино. 123ksn AVR 9 25.11.2014 11:54
Плавный запуск на ардуино Janush Микроконтроллеры, АЦП, память и т.д 10 23.11.2012 18:09


Часовой пояс GMT +4, время: 00:17.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot