9 Ekim 2017 Pazartesi

STM32 İLE HTU21D HABERLEŞMESİ

STM32 İLE HTU21D HABERLEŞMESİ


HTU21D, sıcaklık ve nem ölçen bir çeşit dijital elektronik sensördür.  Bu sensör, -40 ile 125 sıcaklık derecesi arasında çalışmaktadır.  

Sıcaklık ve Nem değerleri I2C haberleşme protoklü kullanarak stm32f429 entegresi HTU21'den alır. Ve daha sonra sıcaklık ve nem sensörü stm32f429 discovery kiti üzerindeki dokunmatik GLCD'de yazdırılır.
  



STM32 İLE BAĞLANTI PİNLERİ

HTU21D----->STM32
SCL                PA8
SDA               PC9
VCC               VCC
GND               GND


KOD:

#include "htu21d.h"

#define __OKUMA_ZAMANI_MS 250//ms cinsinden

int main(void)
{

  /* USER CODE BEGIN 1 */

  /* USER CODE END 1 */

  /* MCU Configuration----------------------------------------------------------*/

  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();

  /* USER CODE BEGIN Init */

  /* USER CODE END Init */

  /* Configure the system clock */
  SystemClock_Config();

  /* USER CODE BEGIN SysInit */

  /* USER CODE END SysInit */

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_UART5_Init();
  MX_DMA2D_Init();
  MX_FMC_Init();
  MX_I2C3_Init();
  MX_LTDC_Init();
  MX_SPI5_Init();

  /* USER CODE BEGIN 2 */
 BSP_LCD_Init();
 BSP_LCD_LayerDefaultInit(LCD_BACKGROUND_LAYER,LCD_FRAME_BUFFER);
 BSP_LCD_LayerDefaultInit(LCD_FOREGROUND_LAYER,LCD_FRAME_BUFFER);
 BSP_LCD_SelectLayer(LCD_FOREGROUND_LAYER);
 BSP_LCD_DisplayOn();
 BSP_LCD_Clear(LCD_COLOR_WHITE);

  /* Set LCD Demo description */
  BSP_LCD_SetTextColor(LCD_COLOR_RED);
  BSP_LCD_FillRect(0, 0, BSP_LCD_GetXSize(), 80);
  BSP_LCD_SetTextColor(LCD_COLOR_WHITE);
  BSP_LCD_SetBackColor(LCD_COLOR_RED);
  BSP_LCD_SetFont(&Font24);
  BSP_LCD_DisplayStringAt(0, 0, (uint8_t *)"HTU21D", CENTER_MODE);
  BSP_LCD_SetFont(&Font12);
  BSP_LCD_DisplayStringAt(0, 30, (uint8_t *)"Bu projede HTU21D sensorunden", CENTER_MODE);
  BSP_LCD_DisplayStringAt(0, 45, (uint8_t *)"sicaklik ve nem bilgisi", CENTER_MODE);
  BSP_LCD_DisplayStringAt(0, 60, (uint8_t *)"okunarak GLCD yazdirilmistir", CENTER_MODE);

  /* Set the LCD Text Color */
  BSP_LCD_SetTextColor(LCD_COLOR_BLUE);
  BSP_LCD_DrawRect(10, 90, BSP_LCD_GetXSize() - 20, BSP_LCD_GetYSize()- 100);
  BSP_LCD_DrawRect(11, 91, BSP_LCD_GetXSize() - 22, BSP_LCD_GetYSize()- 102);
if(!HTU_begin())
{
HAL_GPIO_WritePin(LD3_GPIO_Port,LD3_Pin,1);
}
BSP_LCD_SetFont(&Font24);
BSP_LCD_SetTextColor(LCD_COLOR_RED);
BSP_LCD_SetBackColor(LCD_COLOR_WHITE);
  BSP_LCD_DisplayStringAt(0, 120, (uint8_t *)"SICAKLIK", CENTER_MODE);
BSP_LCD_DisplayStringAt(0, 200, (uint8_t *)"NEM", CENTER_MODE);
TIME=HAL_GetTick();

  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
  /* USER CODE END WHILE */
if(HAL_GetTick()-TIME>__OKUMA_ZAMANI_MS)
{
//her 1 sn içersinde buraya gir ve htu21'den sicaklik ve nem oku.
//okunan sicaklik ve nem degerini dokunmatik ekrana yazdir.
BSP_LCD_SetTextColor(LCD_COLOR_BLACK);
BSP_LCD_SetBackColor(LCD_COLOR_WHITE);
float humd = HTU_readHumidity();
float temp = HTU_readTemperature();
char kelime[15];
sprintf(kelime,"%.3f C",temp);
BSP_LCD_DisplayStringAt(0, 160, (uint8_t *)kelime, CENTER_MODE);
sprintf(kelime,"%% %.3f RH",humd);
BSP_LCD_DisplayStringAt(0, 240, (uint8_t *)kelime, CENTER_MODE);
TIME=HAL_GetTick();
}

  /* USER CODE BEGIN 3 */

  }
  /* USER CODE END 3 */

}

Kodun tamamı için irtibata geçiniz. Çalışan bir projedir. 



1 Ekim 2017 Pazar

MySQL ve ESP8266 Veritabanı Tasarımı ve Gösterimi

MySQL ve ESP8266 Veritabanı Tasarımı ve Gösterimi
Bu yazım da hep merak ettiğim HTML kod kullanarak web sayfası ve PHP kodu kullanarak veritabanı tasarımı üzerine ESP8266'yı kullanarak basit bir çalışma yapacağım.

Bu çalışmadaki amaç şu olacak; ESP8266 bir wifi'ye bağlanarak istediğim bir web url'sine sürekli sensörlerden alinan dataları gönderecek. Bunlar  sicaklık, nem ve gaz sensörleri olabilir ama ben bu projede sabit değerler göndereceğim. Daha sonra gönderilen datalar XAMPP programı kullanarak tasarladığım bir veritabanın da datalarım kaydedilecek. Son olarak kaydedilen datalar ise tasarladığım bir web sayfasında tablo halinde gösterilecektir.

XAMPP programını kullandığım için yani bir web sayfası satın almadığım için internete bağlı olacak cihazlar aynı wifi modeme bağlı olamalılar. Yoksa işe yaramaz. Genelde bu tür projeler ilk önce xampp ile sanal bir sayfa üzerinde yapılır daha sonra gerçek bir url için ayarlanır.

Yapılması gereken adımlar: 


1. ADIM: XAMPP kullanarak ilk önce veri tabanında tablo oluşturulur.

2. ADIM: Veritabanına bağlantı yapacak PHP kod düzenlenir.
KOD:

<?php
$usuario = "root";
$senha = "";
$host ="localhost";
$baglimi= mysqli_connect($host,$usuario,$senha);
$select_bd=mysqli_select_db($baglimi,'esp8266_veritabani');
?>

3.ADIM: Veritabanına veri gönderecek ara sayfa için php kod yazılır.

<?php
include ("baglanti.php");

$sensor1=$_GET['sensor1'];
$sensor2=$_GET['sensor2'];
$sensor3=$_GET['sensor3'];

$sql_gonder="insert into tablo (sensor1,sensor2,sensor3) values ('$sensor1','$sensor2','$sensor3')";

mysqli_query($baglimi,$sql_gonder);


if($sql_gonder)
{
echo "GIRIS YAPILDI";
}
else
{
echo "GIRIS YAPILAMADI";

}
?>

4.ADIM: Veritabından gönderilen dataları göstermek için bir ön sayfa hazırlanır. Biz Bu sayfayı görürüz. Arka tarafı görmeyiz. Bunun için HTML koddan yararlanılır.

<!DOCTYPE html>
<html>
<head>
<meta charset ="utf-8">
<title> HAKAN AYDIN MYSQL </title>
</head>
<body>
<h1> HAKAN AYDIN MYSQL </h1>
<table width="750" border="7" cellspacing="8" cellpadding="7" >
<tr>
<td><b>SAYAC </b></td>
<td><b>ZAMAN </b></td>
<td><b>SENSÖR 1 </b></td>
<td><b>SENSÖR 2 </b></td>
<td><b>SENSÖR 3 </b></td>
</tr>
<?php
include ("baglanti.php");
$sqlget="select * from  tablo";
$result = mysqli_query($baglimi,$sqlget);
while($row= mysqli_fetch_array ($result,MYSQLI_ASSOC))
{
echo "<tr>";
echo "<td>".$row['sayac']."</td>";
echo "<td>".$row['time']."</td>";
echo "<td>".$row['sensor1']."</td>";
echo "<td>".$row['sensor2']."</td>";
echo "<td>".$row['sensor3']."</td>";
echo "</tr>";
}
mysqli_free_result($result);
?>
</table>
</body>
</html>

5. ADIM: http://localhost/ESP8266/gonder.php?sensor1=5.0&sensor2=10.0&sensor3=15.0 url'si girilerek tasarlanan veritabanına veri gönderimi sağlanır ve eğer data veritabanına kaydedildiyse olumlu sonuç geri döner.

6.ADIM: Veri tabanına veri göderecek olan esp8266 kodu ayarlanır. Bu kod belli süre boyunca yukarıdaki url' adresine sürekli aynı datayı gönderir.

#include <ESP8266WiFi.h>

const char* ssid     = "SİZİN WİFİ ADRESİNİZ";
const char* password = "ŞİFRENİZ";

const char* host = "SİZİN IP ADRESINIZ";
const char* streamId   = "....................";
const char* privateKey = "....................";

void setup() {
  Serial.begin(115200);
  delay(10);

  // We start by connecting to a WiFi network

  Serial.println();
  Serial.println();
  Serial.print("Connecting to ");
  Serial.println(ssid);

  WiFi.begin(ssid, password);

  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }

  Serial.println("");
  Serial.println("WiFi connected");
  Serial.println("IP address: ");
  Serial.println(WiFi.localIP());
}

int value = 0;

void loop() {
  delay(5000);
  ++value;

  Serial.print("connecting to ");
  Serial.println(host);

  // Use WiFiClient class to create TCP connections
  WiFiClient client;
  const int httpPort = 80;
  if (!client.connect(host, httpPort)) {
    Serial.println("connection failed");
    return;
  }

  // We now create a URI for the request
  String url = "/ESP8266/gonder.php?sensor1=5.0&sensor2=10.0&sensor3=15.0";


  Serial.print("Requesting URL: ");
  Serial.println(url);

  // This will send the request to the server
  client.print(String("GET ") + url + " HTTP/1.1\r\n" +
               "Host: " + host + "\r\n" +
               "Connection: close\r\n\r\n");
  unsigned long timeout = millis();
  while (client.available() == 0) {
    if (millis() - timeout > 5000) {
      Serial.println(">>> Client Timeout !");
      client.stop();
      return;
    }
  }

  // Read all the lines of the reply from server and print them to Serial
  while(client.available()){
    String line = client.readStringUntil('\r');
    Serial.print(line);
  }

  Serial.println();
  Serial.println("closing connection");
}


7.ADIM: ESP8266'ya kod yüklenir ve sistem çalıştırılır. Datalar veritabınan düşer, aşağıdaki resimde de görülür bu.



Düşen datalar tasarladığımız bizim web sayfamızda görülür. Buraki url adresimiz: http://localhost/ESP8266/sayfa.php



İlerde bir WEB adersi satın alırsanız veritabanınız oraya taşırsınız ve ordaki dataları görmek için şu url kullanırsınız. WWW."SIZIN ADRESINIZ/ESP8266/sayfa.php.COM"