Go Down

Topic: Mini Station méteo avec afficheur LCD TFT 3.6" et liaison BT vers SmarPhone. (Read 51584 times) previous topic - next topic

ROBUDUINO

Salut, je n'ai pas encore reçu les TFT, j'ai bien vu tes ajouts, et c'est vraiment bien, alors si en plus on peut avoir les infos sur un tel alors là c'est génial ! Je ne suis pas encore rentré de vacances... Merci pour ce que tu fais... J'ai hâte d'essayer... :)

hameau

#31
Aug 14, 2015, 06:29 pm Last Edit: Aug 14, 2015, 06:31 pm by hameau
Salut,

Voici ce que cela donne sur un smarphone Android avec une liaison BT.


Sur le LCD pas de gros changement.

Sur le Smartphone.


Voila.

@+





ROBUDUINO


ROBUDUINO

Salut, les TFT sont arrivés, mais j'ai quelques soucis avec la pièce jointe "cablage-LCD" je ne vois pas où connecter les 4 broches SD_IN ; SD_CS ; SD_OUT ; SD_SCK ? Il n'y a pas de N° repère, ceci dit je suppose que c'est pour enregistrements et lectures ultérieures. Et aurais-tu d'autres photos du câblage entre le TFT et le shield mega stp ? Merci. :)
En attendant j'ai connecté les autres, l'écran s'allume mais quand je charge le programme j'ai ce message d'erreur :

"Les options de compilation ont été modifiées, tout sera recompilé
Station_meteo_TFT_v1.ino:2:18: fatal error: UTFT.h: No such file or directory
compilation terminated.
Erreur lors de la compilation."


hameau

Salut,

Pour les broches SD...., cela sert à la mise en place du lecteur de micro-sd qui est présent sur le LCD, pour les tests je n'avais pas fait le câblage, je pourrais mettre à jour mon fichier.

En ce qui concerne l'erreur , il faut au préalable telecharger et installé les librairies , dont la TFT, a tu deja fait cette opération ?

pour le TFT : http://www.rinkydinkelectronics.com/library.php?id=51


Quelle version de l'interface de l'arduino utilises tu ?, si c'est la dernière , tu peut installer celle-ci  en faisant :

Mans le menus du haut, croquis, puis Include librairie, Add zip librairie, choisir le fichier télécharge, et c'est ok.

Sinon je te fait un zip de mon répertoire librairie, et comme ça tu aura tout de disponible, car j'ai du rajouter 4 à 5 librairies en plus.

@+
 

ROBUDUINO

Je viens de mettre la lib UTFT mais maintenant il me faut celle du 3232, donc je veux bien ton répertoire Librairie, ça ira plus vite... Merci.

hameau

Voici le lien pour DL,


http://www.lixamo.com/arduino/libraries.rar

Tu décompresse le rar, puis dans : C:\Program Files (x86)\Arduino, il y a un dossier librairie, tu met le miens à la place de l'original, et c'est ok.

@+
 

ROBUDUINO

Ok, merci pour la librairie, je n'ai plus de message d'erreur, il semble donc que le prog soit bien dans l'arduino, cependant n'ayant connecté que le TFT aurais-je tout de même quelques infos sur l'écran ?
Sur le shield mega, tous les connecteurs sont bien sur "s" ?

hameau

Il n'y aura pas d'information, par contre du doit avoir un cadre blanc qui fait le tour de LCD, ainsi que le titre Station méteo arduino, voir image plus haut, pour les connecteurs oui sur S, je peut faire une photo, mais pas de suite, j'ai de la peinture à faire.

Sinon il y a un test du lcd, dans : fichier, exemples, UTFT, Arduino (AVR), UTFT demo 400*240, puis dans le fichier , recherche la ligne UTFT myGLCD (.......), et modifier comme ci-dessous.

UTFT myGLCD(ILI9327,38,39,40,41);


Cela va te permettre de tester le LCD.

@+

Charles

ROBUDUINO

Pas de cadre, pas de titre, écran blanc, je viens de mettre le prog de test pas de changement... La ligne UTFT myGLCD était déjà changée.
Je vais également retourner au travail, ponçage du parquet... Et je reviens ce soir, si tu as le temps, on en reparlera... Merci.

hameau

Si tu a un un lcd en plus, monte directement celui-ci sur la mega (pas de shield), puis lance le programme de test, normalement cela doit fonctionner, si c'est ok, regarde au niveau du cablage du shield, je vais mettre de nouvelles photos.

@+

ROBUDUINO

C'est ce que j'ai fait, j'ai mis directement le TFT sur le méga, mais rien... :o

hameau

La c'est plus embêtant, c'est bien la même version que celui-ci que j'utilise ?, le transfert du programme se fait sans problème.

peut tu m'envoyer une photo du LCD, voir message privé pour le mail.

J'ai mis sur mon serveur, les photos pas réduite, du shield et du lcd en vue de dessus.

http://www.lixamo.com/arduino/

img..3065 et img 30..66.jpg

Regarde dans message privé, j'ai mis mon téléphone et mon mail.

Voici un programme mini juste pour le LCD, cela fait le cadre, affiche Station méteo Arduino et et 5 lignes Horizontal.

Code: [Select]


#include <UTFT.h>

UTFT myGLCD(ILI9327,38,39,40,41); // Ecran TFT LCD 3.6 pouces

extern uint8_t SmallFont[];
extern uint8_t BigFont[];
extern uint8_t SevenSegNumFont[];


void setup()
{
  myGLCD.InitLCD();
  myGLCD.clrScr();
  myGLCD.setColor(255, 255, 255);
  myGLCD.fillScr(128, 208, 208);
  myGLCD.setBackColor(128, 208, 208);
  myGLCD.drawRect(5,5,395,235);
  myGLCD.drawLine(5,25,395,25);
  myGLCD.drawLine(5,55,395,55);
  myGLCD.drawLine(5,115,395,115);
  myGLCD.drawLine(5,175,395,175);
  myGLCD.drawLine(5,220,395,220);
  myGLCD.setFont(SmallFont);
  myGLCD.print("Station Meteo Arduino", CENTER, 10);
}

void loop()
{
  //

}

hameau

Voici le code sans la gestion de la micro-SD et sans la communication en BT avec un smartphone.

Code: [Select]


#include <UTFT.h>
#include <DS3232RTC.h>    //http://github.com/JChristensen/DS3232RTC
#include <Time.h>         //http://www.arduino.cc/playground/Code/Time  
#include <Wire.h>         //http://arduino.cc/en/Reference/Wire (included with Arduino IDE)
#include <Adafruit_BMP085.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#include "DHT.h"
#include <SPI.h>
//#include <SD.h>
#include <SoftwareSerial.h>

SoftwareSerial BTSerial(15, 14); // RX | TX

#define DHTPIN 17  // Sonde temperature DHT22  
#define DHTTYPE DHT22  
DHT dht(DHTPIN, DHTTYPE);

UTFT myGLCD(ILI9327,38,39,40,41); // Ecran TFT LCD 3.6 pouces

extern uint8_t SmallFont[];
extern uint8_t BigFont[];
extern uint8_t SevenSegNumFont[];

int heures;
int minutes;
int secondes;
int jour_mois;
int Mois;
int annee;
float pression_atm;
float temp_Ext;
int temp_Ext_int;
int temp_Ext_dec;

int temp_Int;
float Tmax_Ext = 0;
float Tmin_Ext = 100;
float Tmax_Int = 0;
float Tmin_Int = 100;

static long date_init;

int comp_sd=0;

int Intervalle = 15;

 
char myData[100];
char DataBT[100];

//const int chipSelect = 53; // port SD card
//Sd2Card card;

const char* jour_semaine[] = {
                   "         \0",
                   "Dimanche \0",
                   "Lundi    \0",
                   "Mardi    \0",
                   "Mercredi \0",
                   "Jeudi    \0",
                   "Vendredi \0",
                   "Samedi   \0"};
                  
const char* mois[] = {
                   "   \0",
                   "Jan\0",
                   "Fev\0",
                   "Mar\0",
                   "Apr\0",
                   "Mai\0",
                   "Juin\0",
                   "Juillet\0",
                   "Aout\0",
                   "Sep\0",
                   "Oct\0",
                   "Nov\0",
                   "Dec\0"};


  
Adafruit_BMP085 bmp; // Sonde de pression atmospherique BMP 180

#define ONE_WIRE_BUS 10  // sonde de temperature DS18B20
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);


void setup()
{
  BTSerial.begin(57600);
  date_init=millis();
  sensors.begin();
  dht.begin();
  myGLCD.InitLCD();
  myGLCD.clrScr();
  myGLCD.setColor(255, 255, 255);
  myGLCD.fillScr(128, 208, 208);
  myGLCD.setBackColor(128, 208, 208);
  myGLCD.drawRect(5,5,395,235);
  myGLCD.drawLine(5,25,395,25);
  myGLCD.drawLine(5,55,395,55);
  myGLCD.drawLine(5,115,395,115);
  myGLCD.drawLine(5,175,395,175);
  myGLCD.drawLine(5,220,395,220);
  myGLCD.setFont(SmallFont);
  myGLCD.print("Station Meteo Arduino", CENTER, 10);
  
  Serial.begin(9600);
  if (!bmp.begin()) {
 Serial.println("Could not find a valid BMP085 sensor, check wiring!");
 while (1) {}
  }
  setSyncProvider(RTC.get);   // the function to get the time from the RTC
  if(timeStatus() != timeSet)
  {
      Serial.println("Unable to sync with the RTC");
  }
    else
   {
      Serial.println("RTC has set the system time");
   }  
    
  
}

void loop()
{
  affiche_heure(10,60);
  affiche_date(10,30);
  pression(190,60);
  temperatures_humidite(15,120);
  
  delay(1000);
  
  
}

void affiche_heure(int x, int y)
{
  heures=hour();
  minutes = minute();
  secondes =second();
  myGLCD.setFont(SevenSegNumFont);
  myGLCD.printNumI(heures, x, y, 2 ,'0');
  myGLCD.printNumI(minutes, x+70, y, 2 ,'0');
  myGLCD.setFont(BigFont);
  myGLCD.printNumI(secondes, x+135, y, 2 ,'0');
      
}

void affiche_date (int x, int y)
{
  jour_mois= day();
  annee=year();
  myGLCD.setFont(BigFont);
  myGLCD.setColor(255,255,0);
  myGLCD.print(jour_semaine[weekday()], x, y);
  myGLCD.printNumI(jour_mois, x+120, y, 2);
  myGLCD.print(mois[month()], x+170, y, 2);
  myGLCD.printNumI(annee, x+305, y, 2);
  myGLCD.setColor(255, 255, 255);
  
}

void pression (int x, int y)
{
  myGLCD.setFont(SevenSegNumFont);
  pression_atm = ((bmp.readPressure()/100)+17);
  myGLCD.printNumI(pression_atm,x,y);
  myGLCD.setFont(BigFont);
  myGLCD.setColor(255, 255, 0);
  myGLCD.print("hPa",x+130,y);
  myGLCD.setColor(255, 255, 255);
}

void temperatures_humidite (int x, int y)
{
  int humidite = dht.readHumidity();
  int temp_Int = dht.readTemperature();
  // Temperature DS 3231
  float c = RTC.temperature() / 4.;
  sensors.requestTemperatures();
  myGLCD.setFont(SevenSegNumFont);
  temp_Ext=(sensors.getTempCByIndex(0));
  temp_Ext_int = int(temp_Ext);
  temp_Ext_dec = int((temp_Ext - temp_Ext_int)*10.);
  Serial.println(temp_Ext);
  Serial.println(temp_Ext_int);
  Serial.println(temp_Ext_dec);
  myGLCD.printNumI(temp_Ext_int,x,y,2,1);
  myGLCD.setFont(SmallFont);
  myGLCD.print("O", x+105, y);
  myGLCD.setFont(BigFont);
  myGLCD.print("C", x+110, y);
  myGLCD.print(",", x+60, y+35);
  myGLCD.print("Ext", x+105, y+35);
  myGLCD.setFont(SevenSegNumFont);
  myGLCD.printNumI(temp_Ext_dec,x+72,y);
  myGLCD.printNumI(temp_Int,x+160,y);
  myGLCD.setFont(SmallFont);
  myGLCD.print("O", x+225, y);
  myGLCD.setFont(BigFont);
  myGLCD.print("C", x+235, y);
  myGLCD.print("Int", x+225, y+35);
  myGLCD.setFont(SevenSegNumFont);
  myGLCD.printNumI(humidite,x+300,y);
  myGLCD.setFont(BigFont);
  myGLCD.print("%", x+365, y);
  if (hour()==00 && minute()==00)
  {
   Tmax_Ext=0;
   Tmin_Ext=100;
   Tmax_Int=0;
   Tmin_Int=100;
 }
 if (Tmax_Ext<temp_Ext)
 {
      Tmax_Ext=temp_Ext;
 }
 if (temp_Ext<Tmin_Ext)
 {
      Tmin_Ext=temp_Ext;
 }
  if (Tmax_Int<temp_Int)
 {
      Tmax_Int=temp_Int;
 }
 if (temp_Int<Tmin_Int)
 {
      Tmin_Int=temp_Int;
 }
 myGLCD.setFont(BigFont);
 myGLCD.setColor(255, 255, 255);
 myGLCD.print("TMax_Ext:", x, y+60);
 myGLCD.printNumI(Tmax_Ext,x+140,y+60);
 myGLCD.print("TMin_Ext:", x, y+80);
 myGLCD.printNumI(Tmin_Ext,x+140,y+80);
 myGLCD.setColor(255, 0, 0);
 myGLCD.print("TMax_Int:", x+190, y+60);
 myGLCD.printNumI(Tmax_Int,x+330,y+60);
 myGLCD.print("TMin_Int:", x+190, y+80);
 myGLCD.printNumI(Tmin_Int,x+330,y+80);
 myGLCD.setColor(255, 255, 255);
}





hameau

Programme pour la mise à l'heure du module RTC, a faire une fois, après la pile du module garde l'heure.

le réglage de l'heure et date se fait ligne 19.

Code: [Select]

#include "Wire.h"
#define DS3231_I2C_ADDRESS 0x68
// Convert normal decimal numbers to binary coded decimal
byte decToBcd(byte val)
{
  return( (val/10*16) + (val%10) );
}
// Convert binary coded decimal to normal decimal numbers
byte bcdToDec(byte val)
{
  return( (val/16*10) + (val%16) );
}
void setup()
{
  Wire.begin();
  Serial.begin(9600);
  // set the initial time here:
  //DS3231 seconds, minutes, hours, day, date, month, year;
  setDS3231time(00,23,18,6,11,07,15);
}
void setDS3231time(byte second, byte minute, byte hour, byte dayOfWeek, byte
dayOfMonth, byte month, byte year)
{
  // sets time and date data to DS3231
  Wire.beginTransmission(DS3231_I2C_ADDRESS);
  Wire.write(0); // set next input to start at the seconds register
  Wire.write(decToBcd(second)); // set seconds
  Wire.write(decToBcd(minute)); // set minutes
  Wire.write(decToBcd(hour)); // set hours
  Wire.write(decToBcd(dayOfWeek)); // set day of week (1=Sunday, 7=Saturday)
  Wire.write(decToBcd(dayOfMonth)); // set date (1 to 31)
  Wire.write(decToBcd(month)); // set month
  Wire.write(decToBcd(year)); // set year (0 to 99)
  Wire.endTransmission();
}
void readDS3231time(byte *second,
byte *minute,
byte *hour,
byte *dayOfWeek,
byte *dayOfMonth,
byte *month,
byte *year)
{
  Wire.beginTransmission(DS3231_I2C_ADDRESS);
  Wire.write(0); // set DS3231 register pointer to 00h
  Wire.endTransmission();
  Wire.requestFrom(DS3231_I2C_ADDRESS, 7);
  // request seven bytes of data from DS3231 starting from register 00h
  *second = bcdToDec(Wire.read() & 0x7f);
  *minute = bcdToDec(Wire.read());
  *hour = bcdToDec(Wire.read() & 0x3f);
  *dayOfWeek = bcdToDec(Wire.read());
  *dayOfMonth = bcdToDec(Wire.read());
  *month = bcdToDec(Wire.read());
  *year = bcdToDec(Wire.read());
}
void displayTime()
{
  byte second, minute, hour, dayOfWeek, dayOfMonth, month, year;
  // retrieve data from DS3231
  readDS3231time(&second, &minute, &hour, &dayOfWeek, &dayOfMonth, &month,
  &year);
  // send it to the serial monitor
  Serial.print(hour, DEC);
  // convert the byte variable to a decimal number when displayed
  Serial.print(":");
  if (minute<10)
  {
    Serial.print("0");
  }
  Serial.print(minute, DEC);
  Serial.print(":");
  if (second<10)
  {
    Serial.print("0");
  }
  Serial.print(second, DEC);
  Serial.print(" ");
  Serial.print(dayOfMonth, DEC);
  Serial.print("/");
  Serial.print(month, DEC);
  Serial.print("/");
  Serial.print(year, DEC);
  Serial.print(" Day of week: ");
  switch(dayOfWeek){
  case 1:
    Serial.println("Sunday");
    break;
  case 2:
    Serial.println("Monday");
    break;
  case 3:
    Serial.println("Tuesday");
    break;
  case 4:
    Serial.println("Wednesday");
    break;
  case 5:
    Serial.println("Thursday");
    break;
  case 6:
    Serial.println("Friday");
    break;
  case 7:
    Serial.println("Saturday");
    break;
  }
}
void loop()
{
  displayTime(); // display the real-time clock data on the Serial Monitor,
  delay(1000); // every second
}


Go Up