| Ваш IP: 34.204.191.0 | Online(37) - гости: 28, боты: 9 | Загрузка сервера: 0.93 ::::::::::::

Веб-сервер на 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

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

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

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

  • Телевизор в качестве осциллографа

    Приставка (см. рисунок)превращает любой телевизор в осциллограф с большим экраном. На нем можно наблюдать НЧ колебания, а с помощью генератора качающей частоты (ГКЧ) визуально настраивать усилители ПЧ радиоприемников. Приставку можно рассматривать как миниатюрный телевизионный передатчик. Несмотря на относительно простую схему, в этом передатчике формируется полный телевизионный сигнал, который отличается от …Подробнее...
  • Широкополосный УМЗЧ

    Широкополосный УМЗЧ

    УМЗЧ выполнен по симметричной схеме. Комплектарные биполярные транзисторы его входного каскада включены по схеме двухтактного дифференциального усилителя, а следующего за ним — по схеме с общим эмиттером. Существенно улучшить параметры такого УМЗЧ позволяет использование в его входных каскадах биполярных и полевых транзисторов. Их других достоинств усилителя следует отметить высокую частоту …Подробнее...
  • Мостовой усилитель на базе TDA7374B

    Мостовой усилитель на базе TDA7374B

    Усилитель на базе TDA7374B относится к классу АВ и используется в автомобильных аудиосистемах. Микросхема имеет защиту от перенапряжения, переполюсовки, тепловую, защиту от статического электричества, защиту от КЗ выходов на шину питания и корпус. Так же имеется встроенная система STAND-BY и MUTE. Усилитель на базе TDA7374B имеет следующие характеристики: Номинальное напряжение …Подробнее...
  • Сенсорный регулятор освещения

    Простым прикосновением к сенсорной пластине вы можете увеличить интенсивность света лампы накаливания в три этапа. Если вы коснетесь сенсорной пластиной, лампочка загорится тускло. При втором прикосновении лампа будет светиться на средней мощности. При третьем касании, лампочка будет гореть на полной мощности. Еще одно прикосновение заставит выключится свет. Основа сенсорного регулятора …Подробнее...
  • Варикап

    Варикап Варикап это полупроводниковый диод, емкость которого зависит от приложенного к нему обратного напряжения. Применение варикапов достаточно широкое, главное его применение это перестройка частоты колебательного контура, частотная модуляция и др. При отсутствии внешнего напряжения в p-n-переходе варикапа существует потенциальный барьер и внутреннее электрическое поле. Если к варикапу приложить обратное напряжение, …Подробнее...