| Ваш IP: 3.230.119.106 | Online(54) - гости: 37, боты: 17 | Загрузка сервера: 0.5 ::::::::::::


STM32 + 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 вольтовым сигналам.

Отладочная  плата STM32 (базе микроконтроллера STM32F103C8T6) позволяет контролировать работу модуля ENC28J60.

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

Подключение:

ENC28J60 STM32F103
VCC 3.3V
GND GND
SCK PA5
SO PA6
SI PA7
CS PA8

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

Перед заливкой скетча в STM32 Вам необходимо ознакомиться со следующей статьей — STM32 Arduino IDE

Для нормальной загрузки скетча Вам понадобится набор библиотек Arduino_STM32-master.zip
// ENC28J60 -  STM32F103
//   VCC    -    3.3V
//   GND    -    GND
//   SCK    -    Pin PA5
//   SO     -    Pin PA6
//   SI     -    Pin PA7
//   CS     -    Pin PA8
 
// Указанные библиотеки входят в состав набора библиотек Arduino_STM32-master.zip
#include <EtherCard_STM.h>
#include <SPI.h>
 
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);
  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 страницу. Датчик температуры DS18B20 подключается к выходу PA4. HTML страница автоматически обновляется каждые 10 секунд.

// ENC28J60 -  STM32F103
//   VCC    -    3.3V
//   GND    -    GND
//   SCK    -    Pin PA5
//   SO     -    Pin PA6
//   SI     -    Pin PA7
//   CS     -    Pin PA8
// Указанные библиотеки входят в состав набора библиотек Arduino_STM32-master.zip
#include <EtherCard_STM.h>
#include <SPI.h>
#include <OneWireSTM.h>
OneWire  ds(4); // PA4
byte i,present = 0,type_s = 0, data[12], addr[8];
float celsius;
int temp0,temp1;
unsigned long times;
 
static byte mymac[] = { 0x74,0x69,0x69,0x2D,0x30,0x31 };
static byte myip[] = { 10,42,0,100 };
 
byte Ethernet::buffer[5000];
BufferFiller bfill;
 
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);
  ether.staticSetup(myip);
}
 
void loop () {
   if(millis()-times>2000){
  ///////// 18b20 //////////////////////
  if ( !ds.search(addr)) {ds.reset_search();delay(250);return;}
  ds.reset();ds.select(addr);ds.write(0x44, 1);delay(250); present = ds.reset();ds.select(addr);ds.write(0xBE); 
  for (i = 0; i < 9; i++) {data[i] = ds.read();}
  int16_t raw = (data[1] << 8) | data[0];if (type_s) {raw = raw << 3;}celsius = (float)raw / 16.0;
  //////// end 18b20 ////////////////////
  }
  temp0 = int(celsius);
  temp1 = (celsius-temp0)*100;
 
  word pos = ether.packetLoop(ether.packetReceive());
  if (pos){ 
  ether.httpServerReply(homePage());   
}}

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

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

// ENC28J60 -  STM32F103
//   VCC    -    3.3V
//   GND    -    GND
//   SCK    -    Pin PA5
//   SO     -    Pin PA6
//   SI     -    Pin PA7
//   CS     -    Pin PA8
// Указанные библиотеки входят в состав набора библиотек Arduino_STM32-master.zip
#include <EtherCard_STM.h>
#include <SPI.h>
#include <OneWireSTM.h>
#include <EEPROM.h>
OneWire  ds(4); // PA4
byte i,present = 0,type_s = 0, data[12], addr[8];
float celsius;
int temp0,temp1,reg,a,w,timer;
String line;
unsigned long times;
const byte gis=1; // Гистерезис 1 градус
 
static byte mymac[] = { 0x74,0x69,0x69,0x2D,0x30,0x31 };
static byte myip[] = { 10,42,0,100 };
 
byte Ethernet::buffer[5000];
BufferFiller bfill;
 
static word HTML() {
  bfill = ether.tcpOffset();
  bfill.emit_p(PSTR(
"<html><head><meta charset='UTF-8'>"
 "<meta http-equiv='refresh' content='$D'/></head>"
 "<style>.tab1 {background-color:#F5F5F5;border-radius: 5px;margin: auto;}a{color:#333;</style></head>"
 "<br><TABLE class='tab1' align='center' width='470' BORDER='1' cellspacing='0' cellpadding='10'>"
 "<td><center><big><b>Терморегулятор STM32 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 type='submit'>Подтвердить</button></form></td><tr>"
 "<td><center>Температура регулировки: <b>$D &#176;C</b></td>"
 "<tr><td><center><small>Время обновления страницы каждые $D сек | <b><a href='/?p=5'>5 сек</a> <a href='/?p=10'>10 сек</a> <a href='/?p=30'>30 сек</a> <a href='/?p=60'>1 мин</a></b>"
 "</td></table></center></html>"
  ),timer,temp0,temp1,reg,timer);
  return bfill.position();
}
 
void setup () {
  Serial.begin(9600);
  EEPROM.init(0x801F000,0x801F800,0x400);// 1024 byte
  ether.begin(sizeof Ethernet::buffer, mymac);
  ether.staticSetup(myip);
  pinMode(PB7, OUTPUT); // PB7 управление реле нагревательного элемента
  reg = EEPROM.read(10);timer = EEPROM.read(11);
}
 
void loop () {
   if(millis()-times>2000){
  ///////// 18b20 //////////////////////
  if ( !ds.search(addr)) {ds.reset_search();delay(250);return;}
  ds.reset();ds.select(addr);ds.write(0x44, 1);delay(250); present = ds.reset();ds.select(addr);ds.write(0xBE); 
  for (i = 0; i < 9; i++) {data[i] = ds.read();}
  int16_t raw = (data[1] << 8) | data[0];if (type_s) {raw = raw << 3;}celsius = (float)raw / 16.0;
  //////// end 18b20 ////////////////////
  }
  temp0 = int(celsius);
  temp1 = (celsius-temp0)*100;
  if(reg >= celsius + gis){digitalWrite(PB7,HIGH);} 
  if(reg <= celsius - gis){digitalWrite(PB7,LOW);} 
 
  word pos = ether.packetLoop(ether.packetReceive());
   if (pos){ 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;}}
  a = line.indexOf("?p=");if(a>0){timer = line.substring(a+3, a+6).toInt();w=1;}
 
  ether.httpServerReply(HTML());
 
  if(w==1){w=0;EEPROM.update(10,reg);EEPROM.update(11,timer);}
}}

 

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

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

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

  • Преобразователь напряжения для питания варикапов

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

    ИК удлинитель

    ИК-удлинитель может увеличить диапазон большинства простых ПДУ (которые имеют модуляцию до 40 кГц) на значительное расстояние. Наиболее часто для несущей используется частота 38-40 кГц, частота управляющих импульсов лежит в диапазоне 1…3 кГц. ИК приемник принимает сигнал с ПДУ, на выходе инфракрасного приемника мы получим демодулированный сигнал, представляющий собой низкочастотные управляющие импульсы, …Подробнее...
  • Электровакуумные и газоразрядные приборы

    Электровакуумные и газоразрядные приборы

    В электровакуумных приборах все процессы происходят при очень высоком вакууме и давлении 10‾5 мм рт ст и меньше. Самый распространенный электровакуумный прибор — электронная лампа, которая состоит из нескольких электродов (катода, анода и сеток), смонтированных внутри баллона. В электронных лампах используется явление электронной эмиссии, то есть происходит выход электронов с поверхности …Подробнее...
  • Радиопередатчик с АМ в диапазоне 27…30МГц

    Основное достоинство передатчика в том что он питается от сети 220В и в качестве антенны использует провода сети. Приемник же принимает сигнал либо от антенны или через специальный сетевой адаптер. Задающий генератор собран на VT2. Для питания микрофона применен параметрический стабилизатор на R1VD1. VT1 — унч, сигнал которого модулирует по …Подробнее...
  • Инфракрасный ключ

    Дальность действия инфракрасного ключа 2-8м, он выполнен на распространенных и доступных микросхемах КР1506ХЛ1 для передатчика и КР1506ХЛ2 для приемника. Брелок инфракрасного ключа основан на КР1506ХЛ1, микросхема питается напряжением 9В, но можно также применить микросхему КР1566ХЛ1, она работает от напряжения 3В, но при этом дальность связи будет меньше (цоколевка обоих микросхем …Подробнее...