coolwolf / 15/01/2021

OsX Seri Port İzleme

OsX altında seri port haberleşmesini izlemek istediğimizde, Windows’ta yaptığımız gibi, Putty veya benzeri terminal programı yüklemeye ihtiyacımız yoktur. Bu işlemi OsX’in dahili “screen” komutu ile yerine getirebiliriz. Alttaki adımları izleyerek, bilgisayarınıza bağlı seri cihazın veri akışını takip edebilirsiniz.

Önce kullanılabilir portaları listeleyelim:

ls /dev/cu.*

Alttaki gibi bir çıktı almalısınız:

/dev/cu.Bluetooth-Incoming-Port	/dev/cu.usbserial-012345

Seri port dinlemeyi başlatalım:

screen /dev/cu.usbserial-012345 115200
  1. parametre Seri port adı. cu.usbserial-012345 kısmını sizin listenizdeki port ile değiştirin.
  2. 2. parametre ise band hızıdır. Dinlemek istediğiniz cihazın baud hızını yazmalısınız.

Terminal (screen) ekranından çıkmak için, önce CTR + A ardından sadece k (veya İngilizce klavyede \ (ters slash)) tuşlarını kullanabilirsiniz.

coolwolf / 16/08/2019

MicroPython machine.Pin kullanımı

Öncelikle kütüphaneyi dahil etmemiz gerekiyor:

from machine import Pin

Ardından pin nesnesi oluşturalım:

EspPin = Pin(33, Pin.IN)

Pin tetiklendiğinde çalıştırılacak fonksiyonu tanımlayalım:

def PinTrigger(p):
    print("Pin Tetiklendi:"+str(p)+"||")

Şimdi Pin.irq fonksiyonu ile pin voltajına göre nasıl tetikleme yapabileceğimize bakalım.
1. trigger=Pin.IRQ_FALLING

EspPin.irq(trigger=Pin.IRQ_FALLING , handler=PinTrigger)

Bu şekilde yaptığımızda, 33 nolu pin – (eksi) değer aldığı sürece, sürekli olarak PinTrigger fonksiyonu çalışacaktır.

2. trigger=Pin.IRQ_RISING

EspPin.irq(trigger=Pin.IRQ_RISING , handler=PinTrigger)

şeklinde kullandığımızda ise pin değeri eksiden artıya döndüğünde tetiklenir.

Mekanik butonlar durum değiştirme esnasında milisaniye aralığında dalgalanma gönderirler. Bu doğal bir sonuçtur. Bu işlemin bize yansıması, pin tetikleme foksiyonumuzun butona her basıldığıdna 3-5 defa peşpeşe tetiklenmesi şeklinde olur.
Önlem olarak, fonksiyon başında, iki tetiklenme arası 200-300 milisaniye geçmemişse fonksiyondan çık şeklinde bir sorgu koyarsak sorunumuz çözülmüş olur.

coolwolf / 10/08/2019

NodeMCU serial Communication with Nextion using LUA

  1. Never forget to set a fuse in init.lua
gpio.mode(6, gpio.INPUT)
EnableBoot=gpio.read(6)

if EnableBoot==0 then dofile("main.lua") 
else print("Device will not continue booting...")
end

Consider we have a text with id t0 on Nextion.
To test two way communication, we put a button on Nextion, which send “Hello from Nextion” over serial.
This incoming data is also printed to the debug screen.
The last component on Nextion is a gauge with id z0.

Below you can found main.lua file wihch does two way communication with Nextion. It sends the Pot value to the Nextion on input trigger. And at at every second it sends Pot value to Nextion’s gauge as integer value.

print("Normal Boot")

local MyInput=5
local Threshold=1000
local LastTrig=0
local PotValue=0

gpio.mode(MyInput,gpio.INT)

local mytimer = tmr.create()

local function SendToNextion(Object,Property,Value,IsInt)
    if IsInt then
        uart.write(0,Object.."."..Property.."="..Value..(string.char (255))..(string.char (255))..(string.char (255)))
    else 
        uart.write(0,Object.."."..Property.."=\""..Value.."\""..(string.char (255))..(string.char (255))..(string.char (255)))
    end  
end

local function InputTrigger(State, Time)
    local ms=tmr.now()/1000
    local diff=ms-LastTrig
    if diff



I hope this helps.

coolwolf / 24/01/2019

Online / Offline UPS farkı nedir ?

Offline UPS: Girişinde elektrik olduğu sürece devreye girmez. Girişindeki elektriği doğrudan çıkışa verir. Bu arada da kendi akülerini şarj eder. Elektrik voltajı belli bir değerin altına düştüğünde şebeke beslemesini kesip, kendi üzerindeki akülerden çıkış verir. 220V kullanan cihazlar genellikle 190 V’a kadar düzgün çalışırlar. Bu durumda offline UPS 200 Voltun altını algıladığı anda birkaç milisaniye içinde devreye girer.
Verdiğim voltaj değerleri yaklaşık örnek değerlerdir. Farklı marka UPS’ler farklı değerler kullanabilir.


Online UPS: Sürekli devrededir. Çıkış voltajı daima 220V olur. UPS devre tasarımına göre;
1. belli bir voltaja kadar regülatör olarak çalışır. Yani aküler devreye girmez. Kendi üzerindeki trafolar yardımı ile elektriği 220 Volta ayarlar. Tabi ortalama UPS boyutlarındaki bir cihaz için bu regülatörlük görevi sadece 10V civarında giriş farkı için yapılabilir.
2. Sürekli olarak aküden çalışır. Bir yandan da akülerini şarj eder. Laptoplar bu tür UPS’lere mükemmel örneklerdir. Elektriğe taktığınız anda hem sizin çalışmanızı sağlar, hem de aküsünü şarj eder. Elektrik gittiğinde de sizi kendi bataryasından çalıştırır.

coolwolf / 01/05/2017

ESP8266, ESP12, ESP13 İlk Programımızı yazalım

NodeMCU Firmware atmadıysanız, öncelikle buradaki yazıyı takip ederek firmware atabilirsiniz.
İlk işimiz ESPlorer’i  buradan indirip, içindeki ESPlorer klasörünü ZIP’ten çıkaralım. Bu klasörde bulunan ESPlorer.bat dosyasına çift tıklayarak ESPlorer programını çalıştıralım.
Dikkat !!! ESPlorer’in çalışması için bilgisayarınızda JAVA yüklü olmalıdır.
İlk işimiz credentials.lua isimli bir dosya oluşturalım ve içine ESP’mizi bağlayacağımız erişim noktasının bilgilerini yazalım:

-- Credentials
SSID = "ERISIM-NOKTASI-ADI"
PASSWORD = "WIFI-PAROLASI"

Ardından init.lua isimli bir dosya oluşturalım ve içine aşağıdakileri yazalım:

-- load credentials, 'SSID' and 'PASSWORD' declared and initialize in there
dofile("credentials.lua")
function startup()
    if file.open("init.lua") == nil then
        print("init.lua deleted or renamed")
    else
        print("Running")
        file.close("init.lua")
        -- the actual application is stored in 'application.lua'
        -- dofile("application.lua")
    end
end
print("Connecting to WiFi access point...")
wifi.setmode(wifi.STATION)
wifi.sta.config(SSID, PASSWORD)
-- wifi.sta.connect() not necessary because config() uses auto-connect=true by default
tmr.create():alarm(1000, tmr.ALARM_AUTO, function(cb_timer)
    if wifi.sta.getip() == nil then
        print("Waiting for IP address...")
    else
        cb_timer:unregister()
        print("WiFi connection established, IP address: " .. wifi.sta.getip())
        print("You have 3 seconds to abort")
        print("Waiting...")
        tmr.create():alarm(3000, tmr.ALARM_SINGLE, startup)
    end
end)

Şimdi ESPlorer arcılığı ile her iki dosyayı da ESP2mize yükleyelim.
Öncelikle Com Port numarasını seçip, baud ayarını da yaptıktan sonra Connect Butonuna basıyoruz.

Aşağıdakine benzer bir çıktı alıyorsanız işlem tamamdır:

PORT OPEN 115200
Communication with MCU..Got answer! Communication with MCU established.
AutoDetect firmware...
Can't autodetect firmware, because proper answer not received (may be unknown firmware).
Please, reset module or continue.
tail 12
chksum 0xd5
ho 0 tail 12 room 4
load 0x3ffe8000, len 2212, room 12
tail 8
chksum 0x36
load 0x3ffe88a4, len 136, room 0
tail 8
chksum 0x5b
csum 0x5b

Şimdi ESPlorer penceresinin en altındaki butonları tıklayarak iletişim kurup kuramadığımıza bakalım.
Mesela Chip Info butonuna bastığınızda alttaki gibi bir çıktı almalısınız:

=node.info()
2	0	0	927018	1458400	4096	2	80000000
>

Artık iletişim kurabildiğimize göre yukarıda oluşturduğumuz iki dosyayı ESP’ye yükleyelim.
Bunun için ESPlorer’ın sol alt tarafında bulunan upload butonunu kullanacağız.

Önce creditentals, sonra da init dosyasını gönderiyoruz.
Run butonuna bastığınızda kodunuz çalışacaktır.

coolwolf / 01/05/2017

ESP Firmware nasıl oluşturulur ve nereden indirilir ?

ESP’niz için hazır firmwareler indirebileceğiniz gibi, en çok kullanılan yöntem olan kendinize özel firmware oluşturma yöntemini de kullanabilirsiniz. Bunun için NodeMCU Cloud Build Service sayfasına eposta adresinizi yazdıktan sonra alt kısımda bulunan seçenekleri ihtiyacınıza göre işaretleyip Start Your Build butonuna tıklayınız.

Buradaki seçeneklerden hepsini seçmek zorunda değilsiniz. Gördüğünüz gibi bazıları zaten kendiliğinden seçilmiş durumdadır. Bunlara ek olarak eklemek istrediğiniz modüller varsa build’inize dahil edebilirsiniz. Hangi modülün ne işe yaradığı hemen sağındaki kitap işaretine tıklayarak ulaşabileceğiniz sayfada açıklanmıştır.
Birkaç dakika içinde firmware’niz eposta adresinize gelecektir.

coolwolf / 14/10/2016

ESP12-E ve ESP12-F Bağlantı Şekli ve Firmware Atma

ESP 12 E, ESP 12 F Pin Bağlantıları:

ESP12F Önden görünüm:


Dikkat: Firmware atarken IO0 GND’ye bağlanmalıdır. Normal çalışma modunda IO0 VCC veya boşta olabilir.


Peki NodeMcu Firmware nasıl yüklenir?
Öcelikle bir USB to Serial çeviriciye ihtiyacınız var. Ben üzerinde 3.3V çıkışı olanı tercih ediyorum. Böylece ESP8266’ya firmware atarken harici bir güç kaynağına ihtiyacım olmuyor.

USB Serial çeviriciyi taktıktan sonra, aygıt yöneticisinden baud ayarlarını aşağıdaki gibi yapınız:

Şimdi Serial çevirici’nin TX ucunu ESP’nin TX ucune, RX ucunu ESP’nin RX ucuna, GND ucunu ESP’nin GND ucuna, son olarak da 3.3V ucunu ESP’nin VCC ucuna bağlayınız.
ESP’ye firmware atmak için en üstte belirtilen ek bağlantıları da yapmalısınız.
Şimdi NODEMCU FIRMWARE PROGRAMMER uygulamasını açıp aşağıdaki ayarları yapalım:
1. Confg kısmından firmware’mizi seçelim. (ESP Firmware nasıl oluşturulur ve nereden indirilir ?)

2. Advanced kısmından port ayarlarını yapalım. Varsayılan firmware atma 74880 baud:

3. Son olarak Firmware’mizi ESP’ye gönderelim:

Eğer MAC adresini görebiliyorsanız ve durum çubuğu ilerliyorsa sorun yok demektir. Durum çubuğunun en sona kadar gelmesini ve yüklemenin bitmesini beklemeniz yeterli. Yükleme bittiğinde sol altta yeşil yanacaktır.

coolwolf / 05/03/2016

Arduino NRF24 alıcı ile uzaktan kumandalı araba

Bu makalede NRF24 kullanarak yapılan bir alıcının çift tekerden tahrikli uzaktan kumandalı bir aracı sürmek için kullanılması ile ilgili bir örnek hazırlamaya çalıştık.
Öncelikle, bu alıcının vericisi bu adreste bulunduğu bilgisini verelim.
Arduino projesinin zip dosyası en altta verilmiştir.


Arduino kodu :

#include
#include "nRF24L01p.h"
nRF24L01p receiver(7,8);//CSN,CE
int M1Hiz=9;
int M1Arti=4;
int M1Eksi=5;
int M2Hiz=10;
int M2Arti=2;
int M2Eksi=3;
int XHiz=0;
int YHiz=0;
int NHiz=0;
void setup(){
  delay(150);
  Serial.begin(9600);
  pinMode(M1Arti,OUTPUT);
  pinMode(M1Eksi,OUTPUT);
  pinMode(M2Arti,OUTPUT);
  pinMode(M2Eksi,OUTPUT);
  digitalWrite(M1Arti,LOW);
  digitalWrite(M1Eksi,LOW);
  digitalWrite(M2Arti,LOW);
  digitalWrite(M2Eksi,LOW);
  analogWrite(M1Hiz,0);
  analogWrite(M2Hiz,0);
  SPI.begin();
  SPI.setBitOrder(MSBFIRST);
  receiver.channel(90);
  receiver.RXaddress("Araba");
  receiver.init();
}
String message;
void loop(){
  if(receiver.available()){
    receiver.read();
    receiver.rxPL(message);
    Serial.println(message);
    KomutIsle(message);
    message="";
  }
}
void KomutIsle(String komut)
{
  Serial.println("Komut:" + komut);
  int ikinokta = komut.indexOf(':');
  if(ikinokta<1) return;
  if(komut.length()<3) return; String yon=komut.substring(0,ikinokta); if(yon=="X") { String deger=komut.substring(ikinokta+1); Serial.println("X-Deger:" + deger); if(!isValidNumber(deger)) return; NHiz=deger.toInt(); NHiz=526-NHiz; Serial.println("X-Hiz:"+String(NHiz)); if(NHiz>10)
    {
      digitalWrite(M1Arti,LOW);
      digitalWrite(M1Eksi,HIGH);
      digitalWrite(M2Arti,LOW);
      digitalWrite(M2Eksi,HIGH);
    }else if(NHiz<-10) { digitalWrite(M1Arti,HIGH); digitalWrite(M1Eksi,LOW); digitalWrite(M2Arti,HIGH); digitalWrite(M2Eksi,LOW); } NHiz=abs(NHiz)/2; if(NHiz>255) NHiz=255;
    XHiz=NHiz;
    YHiz=NHiz;
    Serial.println("X-Motor Hizi:"+String(NHiz));
  }else if(yon=="Y")
  {
    String deger=komut.substring(ikinokta+1);
    Serial.println("Y-Deger:" + deger);
    if(!isValidNumber(deger)) return;
    int hiz=deger.toInt();
    hiz=526-hiz;
    Serial.println("Y-Hiz:"+String(hiz));
    if(hiz>25) XHiz=XHiz+abs(hiz);
    else if(hiz<-25) YHiz=YHiz+abs(hiz);
    else XHiz=YHiz=NHiz;
  }
  analogWrite(M1Hiz,XHiz);
  analogWrite(M2Hiz,YHiz);
}
boolean isValidNumber(String str){
   for(byte i=0;i<str.length();i++)
   {
      if(isDigit(str.charAt(i))) return true;
   }
   return false;
}

NRF24 pin bağlantı şeklini tekrar vermekte fayda var :

Arduino proje dosyası :

[wpdm_package id=’4372′]

nRF24L01p Kütüphanesi:

[wpdm_package id=’4428′]

coolwolf / 10/01/2016

Arduino ve DHT11 ile sıcaklık ve nem okuma

Öncelikle SimpleDHT kütüphanesini ekliyoruz :
Önce Taslak -> Library ekle -> library’leri düzenle
dht_1
Ardından arama kutucuğuna dht yazıp enter tuşuna basın:
dht_2
Böylece kütüphanemizi eklemiş olduk.
Şimdi kütüphane ile birlikte gelen örneği çağıralım.
Bunun için; Örnekler -> Simple DHT -> Default sketch’ini çağırıyoruz.
dht_3
Alttaki bağlantı şekline göre Arduino ile DHT arasındaki bağlantıları yapıyoruz
sicaklikoku
Şimdi alttaki kodu içeren (DHT default ile çağırdığımız) derlemeyi ARduinho’ya gönderebiliriz.

#include
// for DHT11,
// VCC: 5V or 3V
// GND: GND
// DATA: 2
int pinDHT11 = 7;
void setup() {
Serial.begin(115200);
}
void loop() {
// start working...
Serial.println("=================================");
Serial.println("Sample DHT11...");
// read without samples.
byte temperature = 0;
byte humidity = 0;
if (simple_dht11_read(pinDHT11, &temperature, &humidity, NULL)) {
Serial.print("Read DHT11 failed.");
return;
}
Serial.print("Sample OK: ");
Serial.print((int)temperature); Serial.print(" *C, ");
Serial.print((int)humidity); Serial.println(" %");
// DHT11 sampling rate is 1HZ.
delay(1000);
}

Arduino portunuzu doğru seçtiğinizden emin olunuz.
115200 hızında Serial Monitör açarsanız alttaki gibi bir çıktı görmeniz gerekiyor :
dht_4