| Ваш IP: 3.238.107.166 | Online(30) - гости: 23, боты: 7 | Загрузка сервера: 0.5 ::::::::::::

STM32 + TM1637 (Arduino)

Модуль TM1637 представляет собой 4-х разрядный семисегментный дисплей на базе драйвера TM1637. Дисплей имеет десятичные точки в разрядах. Для подключения используется всего 2 цифровых контакта (помимо питания от 3.3 до 5 В) отладочной платы на STM32 (базе микроконтроллера STM32F103C8T6).

Для работы с дисплеем TM1637 можно использовать простую в применении библиотеку STM32_TM1637_V1_3.zip , которая позволяет выводить на дисплей числа (float) от -999 до 9999, менять яркость свечения индикатора, кол-во знаков после запятой и выводить различные символы.

Для подключения библиотека использует цифровые входы STM32 PB0 (CLK) PB1 (DIO), но можно использовать и другие цифровые входы указав их значения в функции tm(PB0,PB1).

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

#include <STM32_TM1637.h> // http://forum.rcl-radio.ru/misc.php?action=pan_download&item=403&download=1

STM32_TM1637 tm(PB0,PB1);// CLK, DIO
 
float h=-10.7;
byte p=1;
 
void setup(){  
  tm.brig(7); // ЯРКОСТЬ 0...7
}
 
void loop(){
   tm.print_float(h,p,  0,0,0,0); 
   delay(500);
  }
 
  /*
 
  tm.print_float(h,p,  h0,h1,h2,h3); 
 
  float h = -999...9999 | 0.000...9.999 | -9.99...99.99 | -99.9...999.9 
  byte p = 0...3 - число знаков после запятой
  h0,h1,h2,h3 = 0 -неактивно
 
      A
     ---
  F |   | B
     -G-
  E |   | C
     ---
      D
 
 h0 h1 h2 h3 
 -----------
   XGFEDCBA (X - запятая)
 0b00000000 
 
   */

Библиотека содержит всего три функции:

  • STM32_TM1637 tm(PB0,PB1);// CLK, DIO
    • подключение CLK, DIO
  • tm.brig(7); // ЯРКОСТЬ 0…7
    • изменение яркости свечения индикатора от 0 до 7
  • tm.print_float(h,p, 0,0,0,0);
    • h — числа от -999 до 9999 при p = 0, от -99,9 до 999,9 при р = 1, от -9,99 до 99,99 при р = 2 и от 0 до 9,999 при р = 3.
    • p — кол-во знаков после запятой.
    • 0,0,0,0 — вставка произвольных символов. При вставке символов следует учитывать, что знакоместо не должно быть занято цифрой.
      • значение 0 отключает режим вставки произвольного символа, а значение например 0b1111000 выводит символ t.

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


Пример использования:

#include <Wire.h>
#include <SPI.h>
#include <Adafruit_Sensor.h> // https://rcl-radio.ru/wp-content/uploads/2018/08/Adafruit_Sensor.zip
#include <Adafruit_BMP280.h> // https://rcl-radio.ru/wp-content/uploads/2018/08/Adafruit_BMP280.zip
#include <STM32_TM1637.h>
 
STM32_TM1637 tm(PB0,PB1);// CLK, DIO
Adafruit_BMP280 bmp; // I2C
 
//  CLK      PB0 (TM1637)
//  DIO      PB1 (TM1637)
//  SDA      PB7 (BMP280)
//  SCL      PB6 (BMP280)
 
void setup(){  
  tm.brig(7); // ЯРКОСТЬ 0...7
  bmp.begin();
}
 
void loop(){  
   tm.print_float(bmp.readTemperature(),1,  0b1111000,0,0,0); 
   delay(3000);
   tm.print_float(bmp.readPressure()/133.3224,0,  0b01110011,0,0,0);
   delay(3000);
  }

Показанный выше скетч позволяет выводить на дисплей TM1637 показания датчика BMP280 (температура и давление). Показания меняются каждые 3 секунды.

На следующем примере подключим дополнительно датчик влажности DHT11 и будем так же выводить его показания с интервалом 3 секунды.

STM32_TM1637 tm(PB0,PB1);// CLK, DIO
Adafruit_BMP280 bmp; // I2C
DHT dht(PB5, DHT11); // выход DAT подключен к цифровому входу B5
 
//  CLK      PB0 (TM1637)
//  DIO      PB1 (TM1637)
//  SDA      PB7 (BMP280)
//  SCL      PB6 (BMP280)
//  DAT      PB5 (DHT11)
 
int h;
float c;
 
void setup(){  
  tm.brig(7); // ЯРКОСТЬ 0...7
  bmp.begin();
  dht.begin(); 
}
 
void loop(){  
   c = bmp.readTemperature();
   h = dht.readHumidity();// влажность    
   tm.print_float(c,1,  0b1111000,0,0,0); 
   delay(3000);
   tm.print_float(bmp.readPressure()/133.3224,0,  0b01110011,0,0,0);
   delay(3000);
   tm.print_float(h,0,  0b01110110,0,0,0);
   delay(3000);
  }

В следующем примере добавим еще один датчик температуры DS18B20, который позволит использовать этот пример в качестве погодной станции. С датчика BMP280  получаем данные о атмосферном давлении и температуры в помещении, с датчика DHT11 получаем данные о влажности в помещении, а с датчика DS18B20 получаем данные от температуре на улице. Все датчики питаются от платы STM32 от напряжения 3,3 В.

#include <OneWireSTM.h> // Библиотека Arduino_STM32-master.zip
#include <Wire.h>
#include <SPI.h>
#include <Adafruit_Sensor.h> // https://rcl-radio.ru/wp-content/uploads/2018/08/Adafruit_Sensor.zip
#include <Adafruit_BMP280.h> // https://rcl-radio.ru/wp-content/uploads/2018/08/Adafruit_BMP280.zip
#include <STM32_TM1637.h>
#include <DHT.h> // https://rcl-radio.ru/wp-content/uploads/2018/08/DHT.zip
 
STM32_TM1637 tm(PB0,PB1);// CLK, DIO
Adafruit_BMP280 bmp; // I2C
DHT dht(PB5, DHT11); // выход DAT подключен к цифровому входу B5
OneWire  ds(7); // A7
 
//  CLK      PB0 (TM1637)
//  DIO      PB1 (TM1637)
//  SDA      PB7 (BMP280)
//  SCL      PB6 (BMP280)
//  DAT      PB5 (DHT11)
//  OUT      PA7 (DS18B20)
 
byte i,present = 0,type_s = 0, data[12], addr[8];
float celsius,c,ddd;
int h;
 
void setup(){ 
  Serial.begin(9600);  
  tm.brig(7); // ЯРКОСТЬ 0...7
  bmp.begin();
  dht.begin(); 
}
 
void loop(){  
   c = bmp.readTemperature();// температура BMP280
   h = dht.readHumidity();// влажность DHT11
   ddd = bmp.readPressure()/133.3224; // давление BMP280 в мм.рт.ст
  ///////// 18b20 //////////////////////
  if ( !ds.search(addr)) {ds.reset_search();delay(250);return;}
  ds.reset();ds.select(addr);ds.write(0x44, 1);delay(100); 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 ////////////////////
   tm.print_float(celsius,0,  0b1111000,0,0,0);
   delay(3000);
   tm.print_float(c,0,  0b1111000,0b00010100,0,0); 
   delay(3000);
   tm.print_float(ddd,0,  0b01110011,0,0,0);
   delay(3000);
   tm.print_float(h,0,  0b01110110,0,0,0);
   delay(3000);
   Serial.print("DS18B20 ");Serial.print(celsius);Serial.println(" C");
   Serial.print("BMP280 ");Serial.print(c);Serial.println(" C");
   Serial.print("BMP280 ");Serial.println(bmp.readPressure()/133.3224);
   Serial.print("DHT11 ");Serial.print(h);Serial.println(" %");
   Serial.println("--------------------------");
  }

 

Библиотеку так же можно использовать с индикаторами TM1637 которые имеют разделительное двоеточие вместо запятых. Для работы с таким индикатором добавлена функция print_time, которая адаптирована специально для вывода времени. Ниже показан скетч использования этой функции.

Для создания часов Вам понадобятся часы реального времени DS1307 (DS3231).

#include <Wire.h>
#include <STM32_TM1637.h> // STM32_TM1637_V1_3.zip
#include <uRTCLib.h>//https://github.com/Naguissa/uRTCLib.git
   STM32_TM1637 tm(PB0,PB1);// CLK, DIO
   uRTCLib rtc(0x68);       
 
   // PB7 = SDA DS1307 (DS3231) 
   // PB6 = SCL DS1307 (DS3231)
   // PB0 = CLK TM1637
   // PB1 = DIO TM1637
 
float h;
 
void setup(){  
  tm.brig(7); // ЯРКОСТЬ 0...7
   Wire.begin();
  // rtc.set(30, 29, 7, 2, 17, 12, 19);
  // RTCLib::set(byte second, byte minute, byte hour, byte dayOfWeek, byte dayOfMonth, byte month, byte year)
}
 
void loop(){
   rtc.refresh();// опрос времени
   h = rtc.hour()*100 + rtc.minute();// 1223 - формат времени = 12 часов 23 минуты
   tm.print_time(h, 0);
   delay(500);
   tm.print_time(h, 1);// мигание двоеточием
   delay(500);
i++;
if(i==10){i=0;tm.print_float(rtc.temp()/100,0 ,0b1111000,0,0,0);delay(2000);}// вывод температуры DS3231
  }

 


Дополнительные материалы:

tm.print_float(h,p,  h0,h1,h2,h3); 

  float h = -999...9999 | 0.000...0.999 | -9.99...99.99 | -99.9...999.9 
  byte p = 0...3 - число знаков после запятой
  h0,h1,h2,h3 = 0 - неактивно
  
      A
     ---
  F |   | B
     -G-
  E |   | C
     ---
      D

 h0 h1 h2 h3 
 -----------
   XGFEDCBA (X - запятая)
 0b00000000 

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

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

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

  • НЕКОТОРЫЕ ВОПРОСЫ ЭКСПЛУАТАЦИИ АККУМУЛЯТОРНЫХ БАТАРЕЙ

    При эксплуатации аккумуляторных батарей следует всегда четко помнить следующее: • после покупки батареи находятся в разряженном состоянии и перед началом эксплуатации их необходимо зарядить; • напряжение на заряженном элементе аккумуляторной батареи составляет 1,2 В; • напряжение конца разряда (напряжение, ниже которого элемент разряжать не следует) составляет 1,0…1,05 В; • емкость …Подробнее...
  • Частотомер на PIC16F628A

    Частотомер на PIC16F628A

    На рисунке показана схема простого частотомера созданного на основе микроконтроллера PIC16F628A. Частотомер измеряет частоту от 2 Гц до 10 МГц, результат измерения выводится на первую строку индикатора 1602А, во второй строке отображается период измеряемого сигнала от 100 нс до 500 мс. Время измерения 1 секунда. Сигнал уровня ТТЛ можно непосредственно …Подробнее...
  • Индикатор перегорания предохранителя

    Данное уст-во индицирует перегорание предохранителя короткими звуковыми и световыми сигналами. индикатор также может работать в цепи постоянного или переменного тока с частотой до 1000Гц и напряжением от 10 до 1000В. В качестве время задающего конденсатора служит пьезокерамический излучатель BQ1 — 0,022…0,5мкФ. Литература Радиолюбитель 2\1999 Автор: М.Шустов, А.Шустов г. ТомскПодробнее...
  • СТАЦИОНАРНЫЙ МОЩНЫЙ СВЕТОРЕГУЛЯТОР

    Сетевой полупроводниковый светорегулятор комнатного освещения со стационарной установкой вместо сетевого выключателя. Предназначен для плавного регулирования яркости свечения ламп накаливания подвесных и потолочных светильников в жилых  помещениях при максимальной мощности нагрузки 300 Вт. Надежная и устойчивая работа светорегулятора обеспечивается в течение длительного времени при эксплуатации в условиях умеренно холодного климата при …Подробнее...
  • Источник питания с фиксированным выходным напряжением 1,5…9В

    Источник питания с фиксированным выходным напряжением 1,5…9В

    При помощи стабилизатора напряжения LM317 можно сделать источник питания с фиксированным выходным напряжением — 1,5, 3, 4,5, 6 и 9В. Максимальный выходной ток источника питания 1,5А. Источник питания имеет защиту от КЗ выхода и тепловую защиту. Для стабилизатора LM317 необходим теплоотвод. В уст-ве используется трансформатор мощностью 20-25 Вт с выходным …Подробнее...