ESP8266 etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
ESP8266 etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

26 Mayıs 2018 Cumartesi

MESH NETWORK HABERLEŞMELİ EV OTOMASYON SİSTEMİ


Uzun bir süredir üzerinde çalıştığım IoT projemin ilk aşamasını tamamlamış bulunmaktayım. Hedefimde temel bir sistemi oluşturmak vardı ve bu saat itibariyle o temeli tamamladım.

IoT projemdeki amacım; Ev içersinde bulunan çeşitli sensörlerden (gaz, yangın, hırsız alarm, sıcaklık, nem, su baskını algılayan sensörler gibi) bluetooth ile toplanan datalar, internet ortamına wifi yardımıyla cloud'a çıkartılıp daha sonra evden uzakta herhangi bir yerde telefon için oluşturulan  android app veya bir web sitesi tarafından izlenmesidir. Hedeflediğim bu temel IoT projesi amacına ulaşmış bulunmaktayım.


Bu sistemi, her ne kadar ev otomasyonu için yaptığım gözükse bile bir çok otomasyon sistemine uyarlana bilmektedir. Örneğin; bir seranız var ve içersindeki gaz miktarını, topraktaki nemi veya ortam sıcaklığını seranız'dan uzakta olsanız bile internet yardımıyla telefonuzdan takip edebilirsiniz.

Bu IoT projemde ilk olarak kendime ait ücretsiz bir web sitesi ve veri tabanı oluşturdum. Web sitemin adı: http://www.myautomationsystem.ml/myautomationsystem.ml/hkn/sayfa.php. Bu linke giderseniz, sizin için şuanlık anlamsız gözükse bile tablo halinde sensörlerden toplanan eski datalarım gözükmektedir. Bu datalar oluşturmuş olduğum veritabanında saklanmaktadır. Link'e tıkladığınızda o veritabanına bağlanıp dataları alıyor ve tablo halinde yazdırıyor.

web sitesi


İkinci olarak telefon için android app uygulması hazırladım. Bu uygulama, check data butonuna tıklandığında yine web sitesinde olduğu gibi veritabanıma bağlanıp dataları oradan çekip son güncel datayı yazdırmaktadır.

App Uygulaması



Son olarak, işi yapan asıl kısımı hazırladım. Burada sensörler ve toplayıcım vardır. Sensörlerim mesh network protoklü ile bluetooth yardımıyla birbirleriyle haberleşmektedir. nRF24L01 bluetooth ve wifi modül olarak  ESP8266 kullanılmıştır. Sensör ve toplayıcı (gateway) kartımın üzerinde stm32 serili ARM tabanlı mikro denetleyiciler bulunmaktadır.  Toplayıcı (gateway) dataları aldıktan sonra esp8266'ya gönderir ve oradan oluşturulan veritabanına yazıdırılmaktadır.




Artık elimde IoT için temeli oluşturulmuş kodlarını tamamen kendimin hazırladığım bir proje bulunmaktadır. Bu sistemi dahada ileriye taşımak için çalışacağım. Kodlar ve proje için benimle iletişime geçebilirsiniz. Buna benzer bir proje isterseniz benimle irtibata geçebilirsiniz. 


Android apk'yı buradan indirebilirsiniz : https://drive.google.com/file/d/17vGuECcoEiz35FX00x9cmBzs14oZ7sPh/view







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"