Форум программистов, компьютерный форум, киберфорум
Visual Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.94/18: Рейтинг темы: голосов - 18, средняя оценка - 4.94
1 / 1 / 0
Регистрация: 12.12.2011
Сообщений: 46

Получение данных от Arduino Ethernet

03.12.2020, 13:14. Показов 3885. Ответов 37
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте.
Можно ли на VB6 организовать получение данных от модуля Arduino Ethernet минуя использование браузера? Браузер медленный, а мне нужно обновлять график каждую секунду. Пробовал через Winsock, но это похоже невозможно, поскольку этот элемент управления способен связываться только с аналогичным ему на другой машине. Подскажите разумные варианты, пожалуйста.
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
03.12.2020, 13:14
Ответы с готовыми решениями:

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

Получение данных с датчиков на arduino (i2c)
Собственно есть решение на JS как получить данные с датчиков. <script type="text/javascript"> var otvet = ""; ...

python получение данных с com порта arduino
Добрый вечер, уважаемые программисты. Пытаюсь получить чистые данные с com3 порта от ардуино. На ардуинке стоит цикл - на Hello world...

37
 Аватар для Pro_grammer
6807 / 2839 / 527
Регистрация: 24.04.2011
Сообщений: 5,308
Записей в блоге: 10
03.12.2020, 21:59
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от kleon-1 Посмотреть сообщение
LocalPort
Это если вы сервер пишите.
RemotePort для клиента.
0
1 / 1 / 0
Регистрация: 12.12.2011
Сообщений: 46
03.12.2020, 22:05  [ТС]
Да, на VB должен работать клиент, на Ардуино - сервер. Ардуино своим АЦП оцифровывает аналоговые сигналы и по запросу клиента отправляет ему. Предполагается два запроса подряд, потом пауза в 1 сек и повтор.
Я же как то должен сообщить winsock куда отправлять запрос и какой порт у себя слушать после запроса. Можно два элемента управления вставить конечно. Но закрытие сокета после выполнения запроса и инициирования прослушки собственного порта мне кажется естественным. Не исключено что я ошибаюсь, потому и зашёл к спецам обсудить чего я не догоняю.
0
Эксперт по электронике
6843 / 3267 / 338
Регистрация: 28.10.2011
Сообщений: 12,761
Записей в блоге: 7
03.12.2020, 22:11
Цитата Сообщение от kleon-1 Посмотреть сообщение
Я же как то должен сообщить winsock куда отправлять запрос и какой порт у себя слушать после запроса.
Порт слушает сервер. Если у вас клиент, необходимо указать адрес и порт к которому подключаться.
0
1 / 1 / 0
Регистрация: 12.12.2011
Сообщений: 46
03.12.2020, 22:16  [ТС]
Ок. В каком состоянии тогда должен находится winsock на клиенте? Если он не будет в состоянии sckListening, то событие Data_Arrival не наступит и клиент не сможет принять данные.
0
 Аватар для Pro_grammer
6807 / 2839 / 527
Регистрация: 24.04.2011
Сообщений: 5,308
Записей в блоге: 10
03.12.2020, 22:51
простейший код клиента
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Private Sub Form_Load()
Winsock1.RemoteHost = "127.0.0.1" ' Указываем IP компа, на котором запущен сервер(В место IP`a можно указать имя компа(Мой Компьютер>>Панель управления>>Сеть>>Индефикация(Winsock1.RemoteHost = "Komp")))(если ты щас не в сети(ил в локалке), то твой IP всегда будет 127.0.0.1)
Winsock1.RemotePort = 101 ' Указываем порт сервера
Winsock1.Connect ' Подключаемся
Form1.Caption = "Клиент"
End Sub
 
 
Private Sub Text1_Change() ' Принимаем запрос
Winsock1.SendData Text1.Text ' Принимаем запрос
End Sub
 
Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long) ' Если сервер посылает текст то:
Dim DD As String ' Объявляем переменную для работы со строками
Winsock1.GetData DD ' Записываем в переменную текст, который был послан Сервером
Text2.Text = DD
End Sub
Сервера
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Private Sub Form_Load()
Winsock1.LocalPort = 101 ' Указываем порт который будет слушать Сервер
Winsock1.Listen ' Начинаем Слушать порт
Form1.Caption = "Сервер"
End Sub
 
Private Sub Text1_Change() ' При изменении текста в текстовом поле:
Winsock1.SendData Text1.Text ' Посылаем клиенту текст который введен в текстовое поле
End Sub
 
Private Sub Winsock1_ConnectionRequest(ByVal requestID As Long)
If Winsock1.State <> sckClosed Then Winsock1.Close ' Если сервер не закрыт, то закрываем его(подробнее смотри ниже)
Winsock1.Accept requestID ' Принимаем запрос
End Sub
 
Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long) ' Если Клиент посылает текст то:
Dim D As String ' Объявляем переменную для работы со строками
Winsock1.GetData D ' Записываем в переменную текст, который был послан Клиентом
Text2.Text = D ' Здесь все понятно, скажу тока что нельзя напрямую писать Winsock1.GetData Text1.Text, нодо обязательно через переменную
End Sub
Они прекрасно коннектятся, пересылают данные между собой.
0
1 / 1 / 0
Регистрация: 12.12.2011
Сообщений: 46
04.12.2020, 06:37  [ТС]
Всё это я уже делал в начале века. Нет в Ардуино никакого Winsock, там сервер организован на процессоре Атмел, а микросхема Wiz5100 обеспечивает Ethernet соединение.
0
 Аватар для Pro_grammer
6807 / 2839 / 527
Регистрация: 24.04.2011
Сообщений: 5,308
Записей в блоге: 10
04.12.2020, 06:55
Цитата Сообщение от kleon-1 Посмотреть сообщение
Нет в Ардуино никакого Winsock... там сервер организован на процессоре Атмел

А зачем нам на Арудино Winsock? Вы же говорите, что вам только клиент нужен. Клиент пишется на компьютере с VB6, а там точно есть Winsock. И он должен работать с TCP и соединяться с любыми серверами, независимо от того, на чем они, хоть на бронепоезде!
0
1 / 1 / 0
Регистрация: 12.12.2011
Сообщений: 46
04.12.2020, 07:07  [ТС]
Состояние на сегодня. Получилось добиться состояния wsk.state=sckConnection, но после передачи ответа нет. Может надо не просто отсылать 1-цу в Ардуино, а передавать еще IP и порт? Запрос браузера обрабатывается, а он весьма информационен.

Добавлено через 3 минуты
Я встречал в сети инфу, что winsock способен коннектится с аналогичным контролом и не более. К примеру, если я отправлю запрос из VB на яндекс через winsock, то получу ответ?

Добавлено через 6 минут
вот что происходит в ответ на запрос браузера:
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
------------------------------------------------------------------------------------------------------------------------------------------------
GET /1 HTTP/1.1
Host: 192.168.0.200:1001
Connection: keep-alive
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.185 YaBrowser/20.11.2.78 Yowser/2.5 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Accept-Encoding: gzip, deflate
Accept-Language: ru,en;q=0.9
 
HTML header is passed
189;467;467;467;
 
GET /favicon.ico HTTP/1.1
Host: 192.168.0.200:1001
Connection: keep-alive
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.185 YaBrowser/20.11.2.78 Yowser/2.5 Safari/537.36
Accept: image/avif,image/webp,image/apng,image/*,*/*;q=0.8
Referer: [url]http://192.168.0.200:1001/1[/url]
Accept-Encoding: gzip, deflate
Accept-Language: ru,en;q=0.9
 
HTML header is passed
279;467;467;467;
-----------------------------------------------------------------------------------------------------------------------------------------------------------------
Это получает модуль Ардуино, а я вывожу запрос через USART на монитор виртуального СОМ-порта
0
 Аватар для Pro_grammer
6807 / 2839 / 527
Регистрация: 24.04.2011
Сообщений: 5,308
Записей в блоге: 10
04.12.2020, 07:10
Цитата Сообщение от kleon-1 Посмотреть сообщение
а передавать еще IP и порт?
Просто повторите код, который я выше написал для клиента.
Цитата Сообщение от kleon-1 Посмотреть сообщение
With wsk
    .LocalPort = 1001
    .RemoteHost = "192.168.0.200"
    .RemotePort = 1001
  End With
И главное, не пишите .LocalPort в клиенте - это приводит к ошибке в работе вашего сервера.
0
1 / 1 / 0
Регистрация: 12.12.2011
Сообщений: 46
04.12.2020, 07:21  [ТС]
Вот с этим текстом ответа нет.

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Private Sub Form_Load()
  With wsk
    .RemoteHost = "192.168.0.200"
    .RemotePort = 1001
    .Connect
  End With
  Text1.Text = ""
End Sub
 
Private Sub Text1_Change()
 Dim str As String
   str = Text1.Text
   wsk.SendData str
End Sub
 
Private Sub wsk_DataArrival(ByVal bytesTotal As Long)
  Dim strGetData As String
  wskIn.GetData strGetData ', vbString ': DoEvents
  Text2.Text = strGetData
End Sub
0
Модератор
10057 / 3902 / 884
Регистрация: 22.02.2013
Сообщений: 5,853
Записей в блоге: 79
04.12.2020, 07:47
kleon-1, ну Вы же сами видите что передаются HTTP запросы, а Вы что передаете? Для подачи HTTP запросов есть дополнительно куча средств помимо сокетов.
0
 Аватар для Pro_grammer
6807 / 2839 / 527
Регистрация: 24.04.2011
Сообщений: 5,308
Записей в блоге: 10
04.12.2020, 07:52
Цитата Сообщение от kleon-1 Посмотреть сообщение
Вот с этим текстом ответа нет.
Это понятно, тут главное что запрашивать. У вас Arduino с WEB-сервером.
Такой сервер никому и никогда просто так ничего не пошлет, чтобы он что-нибудь отправил клиенту надо, чтобы клиент его об этом попросил. Нужен правильный HTTP запрос.
0
1 / 1 / 0
Регистрация: 12.12.2011
Сообщений: 46
04.12.2020, 07:55  [ТС]
Текст скетча.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
#include <Ethernet.h>
#include <SPI.h>
byte mac[] = {0xDE, 0xAD, 0xBE, 0xEF, 0xED};
byte ip[] = {192, 168, 0, 200};
//byte gateway[]={192,168,0,1};
//byte subnet[]={255,255,255,0};
int cnt=0; //счётчик символов клиентского запроса. Нужен для переключения аналоговых каналов
//int channel; //временный параметр кол-ва аналоговых сигналов в ответе сервера
int pinChOne=0; //first digital pin
int pinChTwo=1; //second digital pin
EthernetServer server(1001);
String strData;
void setup()
{
  Ethernet.begin(mac, ip);
  server.begin();
  pinMode(pinChOne,OUTPUT);
  pinMode(pinChTwo,OUTPUT);
//assign six analog pin to input
//  for (int i=14; i<19; i++) pinMode(i,INPUT);
  Serial.begin(9600);
//  Serial.print("Local IP: ");
//  Serial.println(Ethernet.localIP());
//    digitalWrite(pinChOne,LOW);
//    digitalWrite(pinChTwo,HIGH);
}
void loop()
{ //begin_void
  EthernetClient client = server.available();
  if (client)
    { //begin_If проверка наличия соединения
//    boolean sendHeader = false;  
    boolean current_line_is_blank = true;
     while (client.connected())
    { //while_begin
      if (client.available())
      { 
       char c = client.read();
       Serial.print(String(c)); 
       if (cnt==5 && c=='1') //передача первого блока данных
         {
//          channel=5;
            digitalWrite(pinChOne,LOW);
            digitalWrite(pinChTwo,HIGH);
         } 
       if (cnt==5 && c=='2') //передача второго блока данных
         {
//          channel=3;
            digitalWrite(pinChTwo,LOW);
            digitalWrite(pinChOne,HIGH);
         } 
       cnt++;
       if (c == '\n' && current_line_is_blank)
       { 
            Serial.println("HTML header is passed");
            client.println("HTTP/1.1 200 OK");
            client.println("Content-Type: text/html");
            client.println();
            delay(500);
            for (int i=0; i<4; i++)
              {
                strData +=String(analogRead(i));
                strData +=";";
              }
              client.print(strData);
              client.println("<br>");
              Serial.println(strData);
              Serial.println();
              strData="";
              cnt=0; //сброс счётчика символов клиентского запроса по концу передачи
            break;
          }
        if (c == '\n')
          { 
          current_line_is_blank = true;
          }
        else if (c != '\r')
        { 
         current_line_is_blank = false; 
        }
      }//end if(client.available)
      
    }//end while
    delay(1);
    client.stop();
  }//end if(client)
}//end loop
Я попутно вывожу данные в виртуальный СОМ-порт, поэтому подключена библиотека SPI
0
Модератор
10057 / 3902 / 884
Регистрация: 22.02.2013
Сообщений: 5,853
Записей в блоге: 79
04.12.2020, 08:01
kleon-1, пошли ему запрос вида GET /1 и GET /2 по коду у тебя такие запросы принимаются.
0
 Аватар для Pro_grammer
6807 / 2839 / 527
Регистрация: 24.04.2011
Сообщений: 5,308
Записей в блоге: 10
04.12.2020, 08:01
Нужен примерный код отправки GET и POST запросов на сайт, и получение ответа
0
1 / 1 / 0
Регистрация: 12.12.2011
Сообщений: 46
04.12.2020, 08:24  [ТС]
Запросы Get /1 и Get /2 формирует браузер в ответ на адресную строку: 192.168.0.200:1001/1 (/2)
Я вообще в скетче могу прекратить прием после, скажем, 10-го символа. Вот у меня и возникла мысль, что любое обращение к модулю может вызвать ответ. Ведь сервер на Ардуино начинает прием с первого символа запроса от браузера и мне самого факта появления запроса достаточно, чтобы начать передачу данных в ответ. Другое дело, откуда мелкосхема Ethernet Wiz5100 знает куда отправлять данные. Очевидно её внутренний алгоритм должен прочитать весь запрос и определить IP адрес и порт, если он явно указан. Могу обрезать приём запроса на первой строке и посмотреть, получит ли браузер ответ, если это поможет понять суть.
0
Модератор
10057 / 3902 / 884
Регистрация: 22.02.2013
Сообщений: 5,853
Записей в блоге: 79
04.12.2020, 08:36
Лучший ответ Сообщение было отмечено kleon-1 как решение

Решение

Цитата Сообщение от kleon-1 Посмотреть сообщение
Запросы Get /1 и Get /2 формирует браузер в ответ на адресную строку: 192.168.0.200:1001/1 (/2)
Нет. Браузер формирует HTTP запрос по умолчанию.

Цитата Сообщение от kleon-1 Посмотреть сообщение
Вот у меня и возникла мысль, что любое обращение к модулю может вызвать ответ.
Нет, у тебя в коде есть счетчик символов cnt, когда он равен 5, проверяется символ в запросе. Вот сам посчитай:
HTML5
1
GET /1 HTTP/1.1
и
HTML5
1
GET /2 HTTP/1.1
Какой индекс у 1 и 2?
По сути можно передать любой мусор где 5-м символом будет 1 или 2, а затем два перевода строки.

Цитата Сообщение от kleon-1 Посмотреть сообщение
Ведь сервер на Ардуино начинает прием с первого символа запроса от браузера и мне самого факта появления запроса достаточно, чтобы начать передачу данных в ответ.
Нет. Где такое в коде? В скетче анализируется поток, а не просто по приеме первого байта формируется ответ.

Добавлено через 2 минуты
Visual Basic
1
wsk.SendData "GET /1 HTTP/1.1" & vbnewline & vbnewline
- вот это должно решить твою проблему.
Или даже это:
Visual Basic
1
wsk.SendData "GET / HTTP/1.1" & vbnewline & vbnewline
1
1 / 1 / 0
Регистрация: 12.12.2011
Сообщений: 46
04.12.2020, 09:10  [ТС]
Символы я и посчитал, чтобы определить номер канала в коммутаторе аналоговых сигналов. Два канальных передатчика работают по схеме "ИЛИ". Если пришла "1", то к АЦП Ардуино подключаются выходы первых 4-х датчиков, если "2", то следующие 3 датчика. Управление канальными передатчиками происходит через цифровые выходы модуля.
Ну а то, что в скетче анализируется поток, это я из примера взял, где описано построение сервера на Ардуино. То есть моего текста там кот наплакал.
Вот я и думаю, если обрезать приём потока, получит браузер ответ или надо весь пакет принять. Уровень косвенности мешает понять, что происходит на нижнем уровне с Wiz5100. Она же осуществляет прием. Вот сейчас тормозну ее на старте и посмотрю, получит ли браузер данные.

Добавлено через 5 минут
Сэр, вы оказались правы на 100%. Ответ получил. Всем спасибо, я стал чуток умнее )))

Добавлено через 22 минуты
Запрос:"GET /" & Text1.Text & " HTTP/1.1" & vbNewLine & vbNewLine

ответ:
HTTP/1.1 200 OK


Content-Type: text/html




281;467;467;467;
<br>
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
04.12.2020, 09:10
Помогаю со студенческими работами здесь

Получение данных от Arduino и ошибка при обновлении Label
Здравствуйте, прошу помощи следующего плана.. Пишу програмку в C++ VS2015... Она должна принимать от ардуины данные по ком порту и...

Arduino Ethernet
Помогите, подключаю плату расширения Arduino Ethernet к Arduino Mega (насадив одну на другую) подключаю к ПК пишет &quot;USB-устройство не...

Arduino Ethernet shield
Всех с Новым Годом! При выполнении проекта появился непонятная ситуация. После прошивки или после перезагрузки ethernet shield...

Arduino Ethernet c PoE
Крепкого здоровья всем, особенно в борьбе с ковид. Нужен ардуин с Ethernet и питанием от него (PoE). Смотрю на оригинальные...

Arduino и Ethernet модуль (enc28j60)
Всем привет, столкнулся с проблемой витой пары, затем решил освоить связь Ардуино с лок. сетью. Купил Ethernet модуль(enc28j60), смотрю...


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

Или воспользуйтесь поиском по форуму:
38
Ответ Создать тему
Новые блоги и статьи
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20%
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
Использование значений реквизитов справочника в документе, с определенными условиями и правами
Maks 07.04.2026
1. Контроль срока действия договора Алгоритм из решения ниже реализован на примере нетипового документа "ЗаявкаНаРаботу", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если. . .
Доступность команды формы по условию
Maks 07.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: сделать доступной кнопку (команда формы "ЗавершитьСписание") при. . .
Уведомление о неверно выбранном значении справочника
Maks 06.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "НарядПутевка", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если в документе выбран неверный склад. . .
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru