RS 232 в wi-fi или ehternet

ilia74
Offline
Зарегистрирован: 20.02.2016

Добрый день всем, уважаемые форумчане, у меня к Вам вопрос- возможно ли на базе arduino выполнить преобразователь интерфейсов RS 232 в wi-fi или ehternet (в идиале и то и то) ?

Есть у кого нибудь идеи по этому поводу.

Gres
Gres аватар
Offline
Зарегистрирован: 26.03.2013

Конечно можно.

ESP8266

Есть и на этом форуме тема.

 

ilia74
Offline
Зарегистрирован: 20.02.2016

по подробнее можно?:)

 

ilia74
Offline
Зарегистрирован: 20.02.2016

Спасибо, вопрос, без платы arduino это являеться преобразователем интерфесов?

Araris
Offline
Зарегистрирован: 09.11.2012

Поподробнее:

1. Принимаете данные из RS 232 (через RS232-TTL конвертер).

2. Отправляете принятые данные в wi-fi или ehternet.

Если достаточно только WiFi, то Ардуино не понадобится, всё сделает ESP8266.

ilia74
Offline
Зарегистрирован: 20.02.2016

вопрос заключаеться в ледующем- нуже преобразоватье для опроса приборов учета потребления тепла (СПТ 943 там есть rs 232) я использовал вот такую хрень http://usriot.com/Product/46.html   если Ваше предолжение работаспасобно в данной задече зачем платить больше)))?

Gres
Gres аватар
Offline
Зарегистрирован: 26.03.2013

ESP8266 имеет три режима - точка доступа, клиент и точка доступа + клиент, на выходе UART, сам модуль может программироваться без дополнительных контроллеров, есть поддержка модуля в среде Arduino IDE. Огромное сообщество и огромное количество материала по этому модулю. Изучайте.

ilia74
Offline
Зарегистрирован: 20.02.2016

Спасибо )

Gres
Gres аватар
Offline
Зарегистрирован: 26.03.2013

Стандартный пример одной из библиотек модуля:

/* 
  WiFiTelnetToSerial - Example Transparent UART to Telnet Server for esp8266

  Copyright (c) 2015 Hristo Gochkov. All rights reserved.
  This file is part of the ESP8266WiFi library for Arduino environment.
 
  This library is free software; you can redistribute it and/or
  modify it under the terms of the GNU Lesser General Public
  License as published by the Free Software Foundation; either
  version 2.1 of the License, or (at your option) any later version.

  This library is distributed in the hope that it will be useful,
  but WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  Lesser General Public License for more details.

  You should have received a copy of the GNU Lesser General Public
  License along with this library; if not, write to the Free Software
  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
*/
#include <ESP8266WiFi.h>

//how many clients should be able to telnet to this ESP8266
#define MAX_SRV_CLIENTS 1
const char* ssid = "**********";
const char* password = "**********";

WiFiServer server(23);
WiFiClient serverClients[MAX_SRV_CLIENTS];

void setup() {
  Serial1.begin(115200);
  WiFi.begin(ssid, password);
  Serial1.print("\nConnecting to "); Serial1.println(ssid);
  uint8_t i = 0;
  while (WiFi.status() != WL_CONNECTED && i++ < 20) delay(500);
  if(i == 21){
    Serial1.print("Could not connect to"); Serial1.println(ssid);
    while(1) delay(500);
  }
  //start UART and the server
  Serial.begin(115200);
  server.begin();
  server.setNoDelay(true);
  
  Serial1.print("Ready! Use 'telnet ");
  Serial1.print(WiFi.localIP());
  Serial1.println(" 23' to connect");
}

void loop() {
  uint8_t i;
  //check if there are any new clients
  if (server.hasClient()){
    for(i = 0; i < MAX_SRV_CLIENTS; i++){
      //find free/disconnected spot
      if (!serverClients[i] || !serverClients[i].connected()){
        if(serverClients[i]) serverClients[i].stop();
        serverClients[i] = server.available();
        Serial1.print("New client: "); Serial1.print(i);
        continue;
      }
    }
    //no free/disconnected spot so reject
    WiFiClient serverClient = server.available();
    serverClient.stop();
  }
  //check clients for data
  for(i = 0; i < MAX_SRV_CLIENTS; i++){
    if (serverClients[i] && serverClients[i].connected()){
      if(serverClients[i].available()){
        //get data from the telnet client and push it to the UART
        while(serverClients[i].available()) Serial.write(serverClients[i].read());
      }
    }
  }
  //check UART for data
  if(Serial.available()){
    size_t len = Serial.available();
    uint8_t sbuf[len];
    Serial.readBytes(sbuf, len);
    //push UART data to all connected telnet clients
    for(i = 0; i < MAX_SRV_CLIENTS; i++){
      if (serverClients[i] && serverClients[i].connected()){
        serverClients[i].write(sbuf, len);
        delay(1);
      }
    }
  }
}

 

ilia74
Offline
Зарегистрирован: 20.02.2016

Ок буду пробовать ОГРОМНОЕ спасибо)

Gres
Gres аватар
Offline
Зарегистрирован: 26.03.2013

Нашел еще такой вот модуль.

ilia74
Offline
Зарегистрирован: 20.02.2016

Gres пишет:

Нашел еще такой вот модуль.

я его видил) ценник значительно овыше чем ESP8266 ))) попробую использоватьESP8266 )

Gres
Gres аватар
Offline
Зарегистрирован: 26.03.2013

ilia74 пишет:

 ценник значительно овыше чем ESP8266 ))) попробую использоватьESP8266 )

Готовое устройство и должно стоить дороже. ESP8266 нужно будет программировать и преобразовать уровни из UART в RS232. Для тех, у кого сложности и с первым и вторым, проще купить готовое, а если нет боязни в конструировании, естественно ESP8266.

ilia74
Offline
Зарегистрирован: 20.02.2016

Gres пишет:

ilia74 пишет:

 ценник значительно овыше чем ESP8266 ))) попробую использоватьESP8266 )

Готовое устройство и должно стоить дороже. ESP8266 нужно будет программировать и преобразовать уровни из UART в RS232. Для тех, у кого сложности и с первым и вторым, проще купить готовое, а если нет боязни в конструировании, естественно ESP8266.

ради такой экономии готов заморочиться))) с Вашей помощь надеюсь что нибудь получиться)))

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

Gres пишет:

Стандартный пример одной из библиотек модуля:

При всём уважении к авторам этого примера - негодный пример, плохой. Вообще - это беда примеров, скачанных из интернет: они, как правило, никуда не годны, кроме как в помойку. Почему? Всё на самом деле просто: пока используется только один UART, да на небольших скоростях - всё вроде бы ок. Но как только захочется использовать парочку UART - всё, засада с такими примерами. Почему?

Потому что пока один висит на

while(serverClients[i].available()) 
Serial.write(serverClients[i].read());

, буфер другого UART уже успевает переполнится и в итоге - потеря данных. Решение, собственно, простое - юзать serialEvent, внутри него по-бырому сохранять данные, и уже позже с ними работать. Я уже не говорю о тех случаях, когда где-то там внутри какой-то кривой библиотеки по поводу и без юзается delay() ;)

Я чего такой злой-то? Да потому что сам через это прошёл: пока в работе был один GSM-модуль на хардварном Serial1 Меги - всё было ок. Стоило повесить на Serial2 ESP8266 - и всё, начались потери пакетов, именно по причинам, описанным выше. Переделал на полностью асинхронную работу - ттт, пока всё ок.

Поэтому примеры из этих ваших интернетов - годятся только как примеры, чтобы посмотреть - и написать правильно ;)

З.Ы. Ни на что не претендую, просто мимо проходил.

ilia74
Offline
Зарегистрирован: 20.02.2016

DIYMan пишет:

Gres пишет:

Стандартный пример одной из библиотек модуля:

При всём уважении к авторам этого примера - негодный пример, плохой. Вообще - это беда примеров, скачанных из интернет: они, как правило, никуда не годны, кроме как в помойку. Почему? Всё на самом деле просто: пока используется только один UART, да на небольших скоростях - всё вроде бы ок. Но как только захочется использовать парочку UART - всё, засада с такими примерами. Почему?

Потому что пока один висит на

while(serverClients[i].available()) 
Serial.write(serverClients[i].read());

, буфер другого UART уже успевает переполнится и в итоге - потеря данных. Решение, собственно, простое - юзать serialEvent, внутри него по-бырому сохранять данные, и уже позже с ними работать. Я уже не говорю о тех случаях, когда где-то там внутри какой-то кривой библиотеки по поводу и без юзается delay() ;)

Я чего такой злой-то? Да потому что сам через это прошёл: пока в работе был один GSM-модуль на хардварном Serial1 Меги - всё было ок. Стоило повесить на Serial2 ESP8266 - и всё, начались потери пакетов, именно по причинам, описанным выше. Переделал на полностью асинхронную работу - ттт, пока всё ок.

Поэтому примеры из этих ваших интернетов - годятся только как примеры, чтобы посмотреть - и написать правильно ;)

З.Ы. Ни на что не претендую, просто мимо проходил.

От все души спасибо)) объеснить пожалуйста мне в чем отличие между UART и rs233 ? (насколько я понимаю в уровне сигнала? или я ошибаюсь? ) Заранее спасибо.

 

ilia74
Offline
Зарегистрирован: 20.02.2016

Что это за "ЗВЕРЬ" кто нибудь эзал это?    http://usriot.com/Product/131.html

ilia74
Offline
Зарегистрирован: 20.02.2016

По сути нужно ,что то подобное:

ilia74
Offline
Зарегистрирован: 20.02.2016

Только вместо модема использовать ESP 8266