| Ваш IP: 35.175.121.230 | Online(22) - гости: 12, боты: 9 | Загрузка сервера: 0.88 ::::::::::::


Веб-сервер на ENC28J60 (Arduino)

ENC28J60 представляет собой модуль который подключается к плате Arduino с помощью SPI интерфейса, тактовая частота ISP интерфейса может достигать 20 МГц. Для подключения к сети TCP/IP используется разъём RJ-45. Модуль гальванически развязан с ним.

Характеристики модуля ENC28J60:

  • Совместимость с Ethernet сетями 10/100/1000 Base-T. Скорость передачи данных 10 мбит/сек, реализация TCP/IP стека.
  • Интерфейс связи с микроконтроллером – SPI, частота до 20 мГц.
  • Напряжение питания 3,1 – 3,6 В. Типовое 3,3 В.
  • Ток потребления от источника питания 3,3 В:
    • при передачи данных до 180 мА;
    • в активном состоянии, без передачи данных 120 мА;
    • в режиме ожидания не более 2 мА.
  • Модуль обеспечивает гальваническую развязку от линии связи.
  • Выводы интерфейса модуля совместимы с 5 вольтовым сигналам.

Так как ток потребления модуля может достигать 180 мА, то необходим отдельный стабилизированный источник питания 3,3 В с максимальным нагрузки не менее 250 мА.

Подключение модуля ENC28J60 к плате Arduino Nano (Uno):

Плата Arduino Модуль ENC28J60
D12 SO
D11 SI
D13 SCK
D10 CS
RES RST
Внешний источник питания 3,3 В VCC
GND GND

Веб-сервер на ENC28J60 позволяет создавать страницу HTML на которой будут выводится например информация об подключенных к плате Arduino датчиков. Сам модуль ENC28J60 при помощи сетевого кабеля подключается к маршрутизатору (роутер) или напрямую к сетевой карте ПК.

Далее последует несколько примеров скетчей которые позволяют просто вывести текст на веб страницу, подключить датчик температуры и выводить результат измерений и создать простой терморегулятор.


Вывод теста на страницу HTML

#include <EtherCard.h> // EtherCard-master.zip
 
static byte mymac[] = { 0x74,0x69,0x69,0x2D,0x30,0x31 };
static byte myip[] = { 10,42,0,100 };
 
byte Ethernet::buffer[1000];
BufferFiller bfill;
 
static word homePage() {
  bfill = ether.tcpOffset();
  bfill.emit_p(PSTR(
"<html><head><meta charset='UTF-8'>"
"<h1>Привет МИР!!!</h>"
"</html> "
  ));
  return bfill.position();
}
 
void setup () {
  Serial.begin(9600);
  ether.begin(sizeof Ethernet::buffer, mymac, 10);
  ether.staticSetup(myip);
}
 
void loop () {
 
  word pos = ether.packetLoop(ether.packetReceive());
  if (pos){ 
  ether.httpServerReply(homePage());   
}}

Для просмотра содержимого страницы Вы должны ввести в адресную строку браузера IP адрес сервера на ENC28J60. Он должен заранее прописан в скетче:

static byte myip[] = { 10,42,0,100 };

Если Вы подключили ENC28J60 к роутеру, то Вы должны использовать IP адрес внутренней сети. Например роутер имеет адрес 192.168.0.1 , то Вы можете выбрать любой не занятый IP адрес сети (к примеру 192.168.0.100).

У меня указан немного другой адрес, так как я подключил ENC28J60 напрямую к сетевой карте ПК, то моя сеть состоит всего из двух устройств (ПК и ENC28J60) и выбрал IP соответствующий именно этой сети.

В качестве МАС адреса можете использовать любые цифры (в шестнадцатеричной системе), главное чтобы он не совпадал с MAC адресами уст-в имеющихся в сети.


Термометр на DS18B20

В следующим примере будем использовать цифровой датчик температуры DS18B20. Датчик будет измерять температуру и его показания будут выводится на HTML страницу.

#include <EtherCard.h>          // EtherCard-master.zip
#include <OneWire.h>            //https://github.com/PaulStoffregen/OneWire/archive/master.zip
#include <DallasTemperature.h>  // https://rcl-radio.ru/wp-content/uploads/2018/07/DallasTemperature.zip
 
OneWire oneWire(A0);
DallasTemperature t(&oneWire);
 
static byte mymac[] = { 0x74,0x69,0x69,0x2D,0x30,0x31 };
static byte myip[] = { 10,42,0,100 };
 
byte Ethernet::buffer[1000];
float temp;
int temp0,temp1;
BufferFiller bfill;
String line;
 
static word homePage() {
  bfill = ether.tcpOffset();
  bfill.emit_p(PSTR(
"<html><head><meta charset='UTF-8'>"
"<meta http-equiv='refresh' content='10'/>"// обновление страницы каждые 10 секунд
"<h1>Температура: $D.$D &#176;C</h1>"
"</html> "
  ),temp0,temp1);
  return bfill.position();
}
 
void setup () {
  Serial.begin(9600);
  ether.begin(sizeof Ethernet::buffer, mymac, 10);
  ether.staticSetup(myip);
  t.begin(); 
  t.setResolution(11);
}
 
void loop () {
  t.requestTemperatures();
  temp = t.getTempCByIndex(0);
  temp0 = int(temp);
  temp1 = (temp-temp0)*100;
 
  word pos = ether.packetLoop(ether.packetReceive());
  if (pos){  // check if valid tcp data is received 
  ether.httpServerReply(homePage());   
}}


Терморегулятор DS18B20

Следующий пример позволяет реализовать терморегулятор с управлением через HTML страницу. Вы можете задать температуру регулирования, при достижении которой изменяется логическое состояние выхода D2 Arduino. Так же установленная температура регулирования заносится в энергонезависимую память.

#include <EtherCard.h>         // EtherCard-master.zip 
#include <OneWire.h>           //https://github.com/PaulStoffregen/OneWire/archive/master.zip 
#include <DallasTemperature.h> // https://rcl-radio.ru/wp-content/uploads/2018/07/DallasTemperature.zip
#include <EEPROM.h>
OneWire oneWire(A0);
DallasTemperature t(&oneWire);
 
static byte mymac[] = { 0x74,0x69,0x69,0x2D,0x30,0x31 };
static byte myip[] = { 10,42,0,100 };
 
byte Ethernet::buffer[800];
float temp;
int reg,temp0,temp1,a,w;
const byte gis = 1; // гистерезис 1 градус
BufferFiller bfill;
String line;
 
static word homePage() {
  bfill = ether.tcpOffset();
  bfill.emit_p(PSTR(
"<html><head><meta charset='UTF-8'>"
"<meta http-equiv='refresh' content='10'/>"
"<style>.tab1 {background-color:#F5F5F5;border-radius: 5px;margin: auto;}</style></head>"
 
"<br><TABLE class='tab1' align='center' width='470' BORDER='1' cellspacing='0' cellpadding='10'>"
"<td><center><big><b>Терморегулятор DS18B20</b></big></td><tr><td><center>"
"Температура: <b>$D.$D </b>&#176;C"
"</td><tr><td align='center'>Установка температуры регулирования (0...125&#176;C)"
"<form action='' method='GET'>"
"<br><input type='text' name='reg' autocomplete='off' size='1'></input>  "
"<button>Подтвердить</button></form></td><tr>"
"<td><center>Температура регулировки: <b>$D &#176;C</b></td>"
"</table>"
"</center></body></html> "
  ),temp0,temp1,reg);
  return bfill.position();
}
 
void setup () {
  Serial.begin(9600);
  pinMode(2, OUTPUT); // D2 управление реле нагревательного элемента
  ether.begin(sizeof Ethernet::buffer, mymac, 10);
  ether.staticSetup(myip);
  reg = EEPROM.read(0);
  t.begin(); 
  t.setResolution(9);
}
 
void loop () {
  t.requestTemperatures();
  temp = t.getTempCByIndex(0);
  temp0 = int(temp);
  temp1 = (temp-temp0)*100;
  if(reg >= temp + gis){digitalWrite(2,HIGH);} 
  if(reg <= temp - gis){digitalWrite(2,LOW);} 
 
  word pos = ether.packetLoop(ether.packetReceive());
  if (pos){  // check if valid tcp data is received
    char *data = (char *) Ethernet::buffer + pos;
 
  line = data;a = line.indexOf("?reg=");if(a>0){reg = line.substring(a+5, a+8).toInt();w=1;
  if(reg<0){reg=0;}if(reg>125){reg=125;}}
 
  ether.httpServerReply(homePage());   
 
 if(w==1){w=0;EEPROM.update(0,reg);}
}}

Форум — http://forum.rcl-radio.ru/viewtopic.php?pid=949#p949

Добавить комментарий

Войти с помощью: 

Случайные статьи

  • Изготовление тороидальных магнитопроводов большой мощности в домашних условиях

    В наше время, когда многие обзавелись дачей или домом в селе, где сварка является необходимостью, возникает проблема с ее приобретением. Покупка заводского аппарата осложняется его высокой стоимостью. Самая трудоемкая часть — изготовление самого сварочного трансформатора. При этом изготовитель сталкивается с проблемой приобретения магнитопровода. К магнитопроводу предъявляют следующие требования: достаточная площадь …Подробнее...
  • УКВ стереотюнер

    Диапазон принимаемых частот стереотюнера от 67 до 108 МГц, ток потребления не более 25 мА. Тюнер имеет маленькие размеры, его необходимо собирать на плате размерами 7,5*5 см. Все резисторы на 0,125Вт, а R5 подстроечный типа СП5-2ВА или малогабаритный импортный, переменный резистор R4 — СП1_А или импортный. Конденсаторы любые малогабаритные, варикап …Подробнее...
  • Простая охранная система

    Простую охранную систему изготовил Фердаус Ислам («Electronics for you” №3/2005), которую можно использовать в качестве сторожа. Вокруг охраняемого объекта, над землей, следует протянуть тонкие провода, которые будут выполнять функцию датчиков, обнаружения несанкционированного доступа на охраняемую территорию. На рис.1 показана принципиальная схема системы защиты, на рис.2 – пример размещения проволочных рамок …Подробнее...
  • Простой таймер на ИМС 4011

    На рисунке показана схема таймера рассчитанного примерно на 35 мин, таймер состоит из одной микросхемы 4011, одного транзистора и реле на 12В. Таймер может отключать (включать) практически любое устройство — ТВ, радио, эл. двигатель… Время задающая цепь R1 C1 определяет время задержки включения (выключения) таймера, Вы можете изменив это время …Подробнее...
  • Три простых УМЗЧ

    Три простых УМЗЧ

    1. Усилитель при Uпит = 12В развивает мощность до 3 Вт при Rн=4 Ом. Чувствительность 50 мВ, диапазон при неравномерности 6 дБ 50…16000кГц, КНИ не более 1% при номинальной выходной мощности. 2. Усилитель при питании 12В развивает мощность до 5Вт, при этом КНИ не более 0,35%, а диапазон рабочих частот …Подробнее...