The Contiki-NG open source operating system for next generation IoT devices

Figure 1 shows the directory structure of the Contici-NG code base. All the code independent of the platform can be found under ‘os/’ and all equipped drivers can be found under ‘arch/’. The ‘tests/’ directory contains auxiliary programs such as ‘tools/’, which hosts the automatic continuous integration test package, and the scripts used to upload product software to supported devices and create documents.

Fig. 1. Contiki-NG directory structure.
Reklam

Suspending certain processes on Contiki OS

In this article, we will see how to wait for certain operations to be performed on Contiki OS until the conditions are met. For example; we have a transaction, but this operation should allow us after performing it under different processes.

It’s definitely a bug for nodes to get prefixes out of sync. For this reason, it is necessary to wait until the desired job is synchronized.

static struct etimer et;

etimer_set(&et, CLOCK_SECOND);

while(!foure_control.synched){
    PROCESS_WAIT_UNTIL(etimer_expired(&et));
    etimer_reset(&et);
}

React Native Generate APK — Debug and Release APK

What is an .apk file ?

Android Package Kit (APK) is the package file format used by the Android operating system for the distribution and installation of mobile applications. Similar to .exe file in windows operating system, an .apk file is for android.

Debug apk

Debug .apk file allows you to install and test your app before publishing it on app stores. Beware, this isn’t ready to be published yet and there are a few things you need to do before posting. Still, it will be useful for initial deployment and testing.

To run this apk you need to enable debugging options on your phone.

Prerequisite:

  • react-native version > 0.58

How to create one in 3 steps?

Step 1: Go to the root of the project in terminal and run the following command:

react-native bundle --platform android --dev false --entry-file index.js --bundle-output android/app/src/main/assets/index.android.bundle --assets-dest android/app/src/main/res

Step 2: Go to android directory:

cd android

Step 3: Now in this android folder, run this command

./gradlew assembleDebug

There! you’ll find the apk file in the following path:
yourProject/android/app/build/outputs/apk/debug/app-debug.apk

Release APK

Step 1. Create a keystore You will need a Java-generated signing key, which is a keystore file used to create a React Native executable binary for Android. You can create one using the key tool in the terminal with the following command.

keytool -genkey -v -keystore your_key_name.keystore -alias your_key_alias -keyalg RSA -keysize 2048 -validity 10000

When you run the Keytool utility, you are prompted for a password. *Make sure you remember the password

You can change your_key_name with any name you want, as well as your_key_alias. This key uses key-size 2048, instead of default 1024 for security reason.

Step 2. Adding Keystore to Your Project First, you need to copy your_key_name.keystore and paste it under android/app directory in your React Native project folder.

In terminal:

mv my-release-key.keystore /android/app

You need to open your android\app\build.gradle file and add the keystore configuration. There are two ways of configuring the project with keystore. First, the common and unsecured way:

android {
….
signingConfigs {
release {
storeFile file(‘your_key_name.keystore’)
storePassword ‘your_key_store_password’
keyAlias ‘your_key_alias’
keyPassword ‘your_key_file_alias_password’
}
}
buildTypes {
release {
….
signingConfig signingConfigs.release
}
}

}

ON build.gradle:

signingConfigs {
    debug {
        storeFile file('debug.keystore')
        storePassword 'android'
        keyAlias 'androiddebugkey'
        keyPassword 'android'
    }
    release {
        if (project.hasProperty('MYAPP_RELEASE_STORE_FILE')) {
            storeFile file(MYAPP_RELEASE_STORE_FILE)
            storePassword MYAPP_RELEASE_STORE_PASSWORD
            keyAlias MYAPP_RELEASE_KEY_ALIAS
            keyPassword MYAPP_RELEASE_KEY_PASSWORD
        }
    }
}

gradle.properties:

MYAPP_RELEASE_STORE_FILE=my-release-key.keystore
MYAPP_RELEASE_KEY_ALIAS=my-key-alias
MYAPP_RELEASE_STORE_PASSWORD=xxxxxx
MYAPP_RELEASE_KEY_PASSWORD=xxxxxx

Step 3. Release APK Generation

Place your terminal directory to android using:
cd android

For Linux and Mac OSX:
./gradlew assembleRelease

As a result, the APK creation process is done. You can find the generated APK at android/app/build/outputs/apk/app-release.apk. This is the actual app, which you can send to your phone or upload to the Google Play Store. Congratulations, you’ve just generated a React Native Release Build APK for Android.

Resource:

  1. React Native Generate APK — Debug and Release APK, url: https://medium.com/geekculture/react-native-generate-apk-debug-and-release-apk-4e9981a2ea51

“unable to load script make sure you are either running a metro server” Solution

Please open terminal under React-Native project. First create it under android/app/src/main/ if there is no assets folder.

Then run this code on terminal.

npx react-native bundle --platform android --dev false --entry-file index.js --bundle-output android/app/src/main/assets/index.android.bundle --assets-dest android/app/src/main/res 

Now that the errors have been fixed, we can run our android project.

We run the “npm run android” code on the terminal.

If we are taking the screenshot above, it means that our application has been compiled correctly. The screen is as follows.

1.npm run android

2. npx react-native start

                    #######                       
               ################                   
            #########     #########               
        #########             ##########          
    #########        ######        #########      
   ##########################################     
  #####      #####################       #####    
  #####          ##############          #####    
  #####    ###       ######       ###    #####    
  #####    #######            #######    #####    
  #####    ###########    ###########    #####    
  #####    ##########################    #####    
  #####    ##########################    #####    
  #####      ######################     ######    
   ######        #############        #######     
     #########        ####       #########        
          #########          #########            
              ######### #########                 
                   #########                      


                Welcome to Metro!
          Fast - Scalable - Integrated

To reload the app press “r”
To open developer menu press “d”

import React, { useState } from "react";
import {
  StyleSheet,
  Text,
  View,
  Image,
  TextInput,
  Button,
  TouchableOpacity,
} from "react-native";
 
export default function App() {
  const [email, setEmail] = useState("");
  const [password, setPassword] = useState("");
 
  return (
    <View style={styles.container}>
      <Image style={styles.image} source={require("./assets/logo.png")} />
 
      <View style={styles.inputView}>
        <TextInput
          style={styles.TextInput}
          placeholder="Email"
          placeholderTextColor="#003f5c"
          onChangeText={(email) => setEmail(email)}
        />
      </View>
 
      <View style={styles.inputView}>
        <TextInput
          style={styles.TextInput}
          placeholder="Password"
          placeholderTextColor="#003f5c"
          secureTextEntry={true}
          onChangeText={(password) => setPassword(password)}
        />
      </View>
 
      <TouchableOpacity>
        <Text style={styles.forgot_button}>Forgot Password?</Text>
      </TouchableOpacity>
 
      <TouchableOpacity style={styles.loginBtn}>
        <Text style={styles.loginText}>LOGIN</Text>
      </TouchableOpacity>
    </View>
  );
}
 
const styles = StyleSheet.create({
  container: {
    flex: 1,
    backgroundColor: "#fff",
    alignItems: "center",
    justifyContent: "center",
  },
 
  image: {
    marginBottom: 40,
  },
 
  inputView: {
    backgroundColor: "#FFC0CB",
    borderRadius: 30,
    width: "70%",
    height: 45,
    marginBottom: 20,
 
    alignItems: "center",
  },
 
  TextInput: {
    height: 50,
    flex: 1,
    padding: 10,
    marginLeft: 20,
  },
 
  forgot_button: {
    height: 30,
    marginBottom: 30,
  },
 
  loginBtn: {
    width: "80%",
    borderRadius: 25,
    height: 50,
    alignItems: "center",
    justifyContent: "center",
    marginTop: 40,
    backgroundColor: "#FF1493",
  },
});


IoT ağında kullanılan önemli metrik değerler

Bunlar;

  1. Gecik me (Latency)
  2. Enerji Verimliliği (Energy Efficiency)
  3. Güvenilirlik (Reliability)
  4. İşlem Hacmi (Throughput)

Gecikme, Bu metrik, paketlerin iletimindeki maksimu m gecikmeyi temsil eder ve iki başarılı paket arasındaki sürenin hesaplanması ile bulunur.

Enerji verimliliği, pil ömrü ve enerji verimliliği ağ yaşam döngüsünün en önemli unsurudur. Pil her seferinde değiştirilemeyeceği için enerjinin verimli kullanılması gerekir. Enerji tüketimini hesaplayarak bir düğümün ne kadar süre kullanılabileceği bilgisine ulaşabiliriz.

Güvenilirlik, paket iletiminde başarı oranı güvenilirlik olarak tanımlanır.

Throughput, ağ üzerinden iletilen başarılı paketlerin ortalamasını ifade eder. Ne kadar fazla başarılı paket alınırsa başarım oranı o kadar yüksek olur..

I²C (Inter Integrated Circuit)

I²C Veriyolunun Fiziksel Tanımlaması

SDA ve SCL olarak adlandırılan ve ortak olarak kullanılan iki adet veriyoluna sahiptir. SDA hattı veri iletimi için kullanılırken, SCL hattı master tarafından kontrol edilen clock sinyallerinin iletildiği hattır. SDA ve SCL hatları I²C veriyolundaki tüm cihazlara bağlanır. Toprak veya 0 volt olan üçüncü bir tel olması gerekir. Cihazlara güç dağıtıldığından 5 volt’da aynı şekilde sonuç verecektir.

RESİM 1

Master ve Slave

I2C veri yolundaki cihazlar ya master ya da slavedir. Master her zaman SCL saat hattını çalıştıran cihazdır. Slavler, master’a yanıt veren cihazlardır. Bir slave, I²C veri yolu üzerinden bir aktarım başlatamaz, bunu yalnızca bir master yapabilir. I²C veriyolunda birden fazla slave olabilir ve genellikle vardır, ancak normalde yalnızca bir master vardır. Aynı I²C veriyolunda birden fazla master’a sahip olmak mümkündür, ancak bu daha çok spesifik konularda ihtiyaç halinde uygulanan bir yöntemdir. Tekrar etmek gerekirse slaveler asla iletişim başlatamazlar veri aktarımları her zaman masterın kontrolündedir. MAster bu kontrolü clock hattı(SCL) yardımıyla sağlar. Yazının ilerleyen bölümlerinde basit bir iletişim örneği verilecektir.

Master bir slave ile konuşmak istediğinde, I²C veriyolunda bir başlatma sırası(start sequence) yayınlayarak başlar. Bir başlatma sırası, I²C veriyolu için tanımlanan iki özel diziden biridir, diğeri ise durdurma dizisidir(stop sequence). Başlatma sırası ve durdurma sırası, SCL (saat hattı) yüksekken SDA’nın (veri hattı) değişmesine izin verilen tek yer olması bakımından özeldir. Veri aktarılırken, SDA sabit kalmalı ve SCL yüksekken değişmemelidir. Başlatma ve durdurma dizileri, bağımlı cihazla yapılan bir işlemin başlangıcını ve bitişini işaretler.

RESİM 2

Veriler 8 bitlik diziler halinde aktarılır. Bitler, MSB’den (En Önemli Bit) başlayarak SDA hattına yerleştirilir. SCL hattı daha sonra önce yüksek, sonra düşük olarak ayarlanır. Master olarak kullandığımız çipin aslında SCL hattını yükseltemeyeceğini(+5V veya +3V gibi) unutmayın, basitçe “bırakır” ve direnç aslında onu yükseğe çeker(Resim 1′ deki pull-up dirençlerine bakabilirsiniz). Aktarılan her 8 bit için, verileri alan cihaz bir onay biti gönderir, bu nedenle her 8 bitlik veriyi aktarmak için aslında 9 SCL saat darbesine ihtiyacımız vardır(Resim 3’ü inceleyiniz).

RESİM 3

I²C’de Device Adreslemek

Günümüzde I²C adresleri 7 bittir(Çok nadirde olsa 10 bitlik adreslerde buluunmaktadır.). 7 bitlik bir sayı 0’dan 127’ye kadar olabileceğinden, I2C veriyolunda 128’e kadar cihaza sahip olabileceğiniz anlamına gelmektedir. 7 bit adresi gönderirken, yine de her zamanki gibi 8 bit göndeririz. Ekstra bit, master’ın ona yazıp yazmadığını veya ondan okuma yapıp yapmadığını slave’e bildirmek için kullanılır(R/W biti). Eğer bit sıfır ise master slave’e yazıyordur. Bit 1 ise, master slave’den okuyordur. 7 bitlik adres, baytın üst 7 bitine yerleştirilir ve Okuma/Yazma (R/W) biti LSB’de (Least Significant Bit) bulunur.

RESİM 4

I²C Protokolü’nün Algoritması

İlk adımda, master bir başlangıç ​​dizisi(start sequence) göndermelidir. Bu, veri yolundaki tüm bağımlı cihazları bir işlemin başladığı konusunda uyaracak ve kendileri için olması durumunda dinlemeleri gerekecektir. Daha sonra master cihaz adresini gönderecektir. Bu adresle eşleşen slave işleme devam edecek, diğerleri bu işlemin geri kalanını görmezden gelecek ve bekleme konumuna geçeceklerdir. Slave cihazı adresledikten sonra, master şimdi yazmak veya okumak istediği slave içindeki dahili konumu veya kayıt numarasını göndermelidir. Bu sayı açıkça slave’in gerçekte ne olduğuna ve kaç tane dahili kaydına sahip olduğuna bağlıdır. I²C adresini ve dahili kayıt adresini gönderdikten sonra master artık veri baytını (veya bayt, yalnızca bir tane olması gerekmez) gönderebilir. Master, slave’e veri baytları göndermeye devam edebilir ve bunlar normal olarak aşağıdaki kayıtlara yerleştirilecektir, çünkü slave her bayttan sonra dahili kayıt adresini otomatik olarak artıracaktır. Master, tüm verileri slave yazmayı bitirdiğinde, işlemi tamamlayan bir durdurma dizisi(stop sequence) gönderecektir.

  • Slave’e veri yazmak için:
  1. Start Sequence(başlama dizisi) gönderin.
  2. Slave’in I²C adresini R/W bitini düşük bit olarak gönderin.
  3. Yazmak istediğiniz internal register numarasını gönderin.
  4. Veri byte(lar)’nı gönderin.
  5. 1 byte’dan fazla veri yazacaksanız diğer byte’ları gönderin.
  6. Stop Sequence(Durma dizisi) gönderin.
  • Slave’den veri okumak için:Slave cihazdan veri okumadan önce, ona dahili adreslerinden hangisini okumak istediğinizi söylemelisiniz. Yani slave’in okunması aslında ona yazarak başlar. Bu, ona yazmak istediğiniz zamankiyle aynıdır: Başlatma sırasını, R/W bit düşük (çift adres) ile slave’in I²C adresini ve yazmak istediğiniz internal register numarasını gönderirsiniz. Şimdi başka bir başlatma dizisi (bazen yeniden başlatma olarak adlandırılır) ve I²C adresini yeniden gönderirsiniz – bu sefer okuma biti ayarlanmış olarak. Daha sonra istediğiniz kadar veri baytı okursunuz ve işlemi bir durdurma sırası ile sonlandırabilirsiniz.
  1. Start Sequence gönderin.
  2. Slave’in I²C adresini R/W bitini düşük bit olarak gönderin.
  3. Yazmak istenen register numarasını gönderin.
  4. Yeniden başlama dizisi gönderin.
  5. Slave’in I²C adresini R/W bitini yüksek bit olarak gönderin.
  6. Veri byte’nı okuyun.
  7. Stop Sequence(Durma dizisi) gönderin.

Yukarıda ads7828 A/D Converter’ın yazma ve okuma işlemi için sergilediği davranışı görüyorsunuz. Yazma işleminde yukarıdaki algoritma sırasında ilk önce start condation gönderiyor ve daha sonra adres byte’nıı SDA veri yoluna R/W biti düşük seviye olacak şekilde iletiyor bu adrese sahip slave cihaz bu mesajı alması için ack(acknowledge) biti gönderip SDA hattını düşük seviye yapıyor ve daha sonra Command byte’nı yani bunu data olarak da adlandırabiliriz hatta iletiyor. Gönderilen adresin sahibi olan slave cihaz bu bir bytelık veriyi kendi registerlarına yazacaktır ve I²C yazma işlemi başarılı bir şekilde sonlanacaktır.

Görselin ikiinci kısmında ise slave cihazdan veri okuma işlemi gösteriliyor. Gri renkle boyanmış alanlar master cihazdan slave cihaza aktarılan bitler iken beyaz renkli alanlar slave cihazdan master cihaza aktarılan veriler olduğunu göz önüne alırsanız anlamannız biraz daha kolaylaşabilir. Görüldüğü üzere ilk aşamada aynı yazma işleminde olduğu gibi süreç master cihazın hatta Start Condition bitini göndermesiyle başlıyor daha sonra slave cihazın adresini ve akabinde R/W bitini Read modunda yani yüksek seviye ayarlayarak hatta ileetiyor ve ardından bir ack biti göndererek SDA hattını düşük seviyeye çekiyor. Hatta kendi adresini gören slave biti Read modunda olduğu için registerlarındaki bitleri hatta iletmeye başlıyor. ads7828 A/D converter 12 bit çözümleyebildiği için değersiz olan son 4 bite dikkat ediniz(alışagelinmiş soldan sağa okuma bitlerde geçerli değil bunu hatırlamakta fayda var :)). 8 bitlik ilk gönderim sonlandıktan sonra master cihaz bir ack biti daha gönderip SDA hattını tekrardan düşük seviyeye çekiyor ve slave cihazdan 8 bitlik veri alıyor en sonunda nack biti ile SDA hattını yüksek seviyeye çekip Stop condition biti ile okuma işlemini tamamlıyor.

ÖRNEK I²C Kütüphanesi

Bu örnek, saat gerdirme de dahil olmak üzere bir I²C master yazılımının nasıl uygulanacağını gösterir. PIC işlemcisi için C ile yazılmıştır. Tüm I²C tabanlı iletişim kuran tüm cihazları kontrol etmek için uygundur.

#define SCL     TRISB4 // I2C bus
#define SDA     TRISB1 //
#define SCL_IN  RB4    //
#define SDA_IN  RB1    //

Bağlantı noktalarını başlatmak için çıkış dirençlerini 0'a ve tristat kayıtlarını 1'e ayarlayın, bu da çıkışları devre dışı bırakır ve dirençler tarafından yükseğe çekilmelerine izin verir.

SDA = SCL = 1;
SCL_IN = SDA_IN = 0;

I2C veriyolunda net bir sıra vermek için SDA ve SCL değişiklikleri arasında gecikme kullanıyoruz.

void i2c_dly(void)
{
}

void i2c_start(void)
{
  SDA = 1;             // i2c start bit sequence
  i2c_dly();
  SCL = 1;
  i2c_dly();
  SDA = 0;
  i2c_dly();
  SCL = 0;
  i2c_dly();
}

void i2c_stop(void)
{
  SDA = 0;             // i2c stop bit sequence
  i2c_dly();
  SCL = 1;
  i2c_dly();
  SDA = 1;
  i2c_dly();
}

unsigned char i2c_rx(char ack)
{
char x, d=0;
  SDA = 1; 
  for(x=0; x<8; x++) {
    d <<= 1;
    do {
      SCL = 1;
    }
    while(SCL_IN==0);    // wait for any SCL clock stretching
    i2c_dly();
    if(SDA_IN) d |= 1;
    SCL = 0;
  } 
  if(ack) SDA = 0;
  else SDA = 1;
  SCL = 1;
  i2c_dly();             // send (N)ACK bit
  SCL = 0;
  SDA = 1;
  return d;
}

bit i2c_tx(unsigned char d)
{
char x;
static bit b;
  for(x=8; x; x--) {
    if(d&0x80) SDA = 1;
    else SDA = 0;
    SCL = 1;
    d <<= 1;
    SCL = 0;
  }
  SDA = 1;
  SCL = 1;
  i2c_dly();
  b = SDA_IN;          // possible ACK bit
  SCL = 0;
  return b;
}


Yukarıdaki 4 temel işlev, eksiksiz I2C işlemlerini oluşturmak için kolayca bir araya getirilebilir. İşte cm cinsinden bir SRF08 başlatma örneği:

i2c_start();              // send start sequence
i2c_tx(0xE0);             // SRF08 I2C address with R/W bit clear
i2c_tx(0x00);             // SRF08 command register address
i2c_tx(0x51);             // command to start ranging in cm
i2c_stop();               // send stop sequence


Şimdi, aralığın tamamlanması için 65mS bekledikten sonra (bunu size bıraktım) aşağıdaki örnek, ışık sensörü değerinin kayıt 1'den ve aralık sonucunun kayıt 2 ve 3'ten nasıl okunacağını gösterir.

i2c_start();              // send start sequence
i2c_tx(0xE0);             // SRF08 I2C address with R/W bit clear
i2c_tx(0x01);             // SRF08 light sensor register address
i2c_start();              // send a restart sequence
i2c_tx(0xE1);             // SRF08 I2C address with R/W bit set
lightsensor = i2c_rx(1);  // get light sensor and send acknowledge. Internal register address will increment automatically.
rangehigh = i2c_rx(1);    // get the high byte of the range and send acknowledge.
rangelow = i2c_rx(0);     // get low byte of the range - note we don't acknowledge the last byte.
i2c_stop();               // send stop sequence

IP Hakkında Bilgilendirme

IP Nedir?
IP adresi (Internet Protocol Address), internete veya yerel ağa bağlanan cihazların birbirleri ile
haberleşmeleri için kullandıkları adrestir. Nasıl birbirinden farklı yerdeki insanlar haberleşmek için telefon
numarası kullanıyorlarsa internete bağlanan her cihazda benzersiz ip numarası ile haberleşirler. Yani
haberleşmek için TCP/IP protokolünü kullanan her cihaz bir IP adresi almak zorundadır.
Internet’e bağlanan her bilgisayara, İnternet Servis Sağlayıcısı(ISP) tarafından bir IP adresi atanır ve internetteki diğer bilgisayarlar bu bilgisayara verilen adres ile ulaşırlar. IP adresine sahip iki farklı cihaz ayni yerel ağda olmasa dahi, yönlendiriciler vasıtası ile birbirleri ile iletişim kurabilirler.
Statik IP

İnternete çıkan her bilgisayara İnternet servis sağlayıcısı (ISP) tarafından verilen ve hiç değişmeyen IP adresidir. Sunucu hizmeti veren bilgisayarlara statik IP atanır ve değişiklik yapılmadığı sürece de bu IP
adresini kullanırlar. İnternet servis sağlayıcısından belli bir ücret karşılığı sabit IP hizmeti alınabilir.
Dinamik IP
Modemin veya bilgisayarın açılıp kapandığında değişen IP’ye dinamik IP adresi denir. Genelde internet
kullanıcısının sahip olduğu ip adresidir. Kısaca internet servis sağlayıcısı (ISP) o an boşta olan bir ip’yi
internete bağlanan kullanıcıya atar. Yani kullanıcı internete her bağlandığında farklı bir ip kullanır.
IP Sınıfları
A Sınıfı: A sınıfı ağlar 1.0.0.0’dan 127.0.0.0’a kadar olan ağları kapsar. Sadece ilk oktet, ağ numarasını
belirler, geri kalanlar ise her bir ağ içinde kullanılabilecek (atanabilecek) makine sayısını belirler ki bu
sınıfta, dolayısıyla, 24 bit makine kısmına ayrılmıştır. Bu da kabaca, ağ başına 1.6 milyon makine anlamına
gelmektedir.
B Sınıfı: B sınıfı ağlar, 128.0.0.0’dan 191.255.0.0’a kadar olan ağları içermektedir. Ağ numarası, ilk iki
oktet ile belirlenir. Bu sınıf ile 65,024 adet makineden oluşan 16,320 adet ağ tanımlanabilir.
C Sınıfı: C sınıfı ağlar ise 192.0.0.0 ile 223.255.255.0 arasını kapsar. İlk 3 oktet ağ numarasını belirler
ve geri kalanlar da her bir ağ içinde bulunabilecek makine sayısını belirler. Dolayısıyla her biri 254 makineli
yaklaşık 2 milyon ağ tanımlanabilir.
D, E, ve F Sınıfları: 224.0.0.0 ile 254.0.0.0 arasında kalan adresler, ya deneysel amaçlıdırlar ya da belirli
amaçlar için ayrılmışlardır ve herhangi bir ağ tanımlamazlar. Bir internet üzerinde, paketlerin, bir seferde
birçok noktaya iletilmesi hizmetini veren IP çoklu yayını (IP Multicast) için, bu aralıktaki adresler atanır.
Alt Ağlara Bölme (Subnetting)
* Network yapısını alt ağlara bölme işlemine subnetting denir. Bu işlem ile IP ‘ler alt sınıflara ayrılır.
* Alt ağlara bölme işleminin nedenleri:
* Alt ağlara bölme işlemi, mevcut IP adresleri sınırlı olması nedeniyle ve 32 bitlik IP adres alanının
verimliliğini arttırmak için yapılır. Bu işlem sayesinde boşa harcanmış IP adresi sayısı azaltılmış
olur.
* Alt ağlara bölme işlemi broadcast etki alanını daraltır ve tüm networkteki cihazlar yoğun bir
broadcast trafiğine maruz kalmaz. Bu da ağ performansını arttırır.
* Alt ağlara bölünmüş bir network daha kolay yönetilebilir.
* Güvenlik gerekçeleri ile de alt ağlara bölme işlemi yapılabilir. Bu alt ağlara erişim kısıtlanabilir.

Classfull IP Adresi Sınıfları
IP adreslerinin sınıflarına göre alt ağ maskeleri belirlenmiştir. Sınıfına uygun alt ağ maskesine sahip olan
IP adreslerine classfull IP adresi denir.
A sınıfı: İlk okteti 1 – 127 arası olanlar –> Öngörülen Ağ Maskesi:255.0.0.0
B sınıfı: İlk okteti 128 – 191 arası olanlar –> Öngörülen Ağ Maskesi:255.255.0.0
C Sınıfı: İlk okteti 192 – 223 arası olanlar –> Öngörülen Ağ Maskesi:255.255.255.0
D sınıfı: İlk okteti 224 – 239 arası olanlar –> Çoklu yayın
E sınıfı: İlk okteti 240 – 254 arası olanlar –> Araştırma için ayrılmıştır.
Özel IP Adresleri
10.0.0.0 – 10.255.255.255
172.16.0.0 – 172.31.255.255
192.168.0.0 – 192.168.255.255
Bu IP adresleri yerel alan ağlarında kullanılmak üzere tahsis edilmiştir ve internete çıkacakları zaman
gerçek IP adreslerine NAT yapılarak kullanılabilirler.
Alt Ağ Maskesi (Subnet Mask)
Alt ağ maskesi, alt ağın boyutunu ve kaç tane IP’ye sahip olacağını belirler. Alt ağ maskesi kullanıcı
sayısına ve istenen IP sayısına göre seçilmelidir.
Aynı alt ağda bulunan bilgisayarları temsil eden sınıf adresine Network Adresi denir. Bu adresler, IP
olarak herhangi bir cihaza atanamazlar ve oluşturulan alt ağların ilk adresleridir. Herhangi bir ağda bütün
adresleri temsil etmek için kullanılan adreslere Broadcast Adres denir. Bu adresler de ağ adresi gibi ağdaki herhangi bir bilgisayara IP adresi olarak atanamazlar ve oluşturulan alt ağların son adresleridir.
Alt Ağ Maskelerinin ikilik taban (binary) ve ondalık taban (decimal) gösterimi
Örneğin; Alt ağ maskesi 255.0.0.0 olan maskenin gösterimleri aşağıda verilmiştir.
İkilik Taban 11111111 00000000 00000000 00000000
Ondalık Taban 255 0 0 0
Bir alt ağ maskesindeki 1 bitleri IP adresinin ağ adresi kısmını, 0 bitleri ise IP adresinin host kısmını
gösterir. Host sayısını bulmada genel formül 2^n dir. Buradaki n, alt ağ maskesindeki 0 olan bitlerin
sayısıdır. Alt ağ maskesindeki 0 olan bitlerin, IP adresindeki karşılığı olan bitlerin tamamı 1 yapılarak
broadcast adresi hesaplanır. Alt ağ maskesi ile IP adresi mantıksal AND (VE) işlemine tabi tutulduğunda ağ adresi bulunur. Her bir alt ağdaki istemci sayısı “2^n-2” formülünden bulunabilir. Kullanıcı sayısını veren
2^n değerinden 2 çıkarılması ise ağ adresi (Network ID) ve yayın adresinin (Broadcast ID) IP olarak kullanıcılara verilememesinden kaynaklanmaktadır.

Soru 192.168.1.1 /24 için
1) Kaç IP var?
-> 1 tane IP var.
2) Networkte kaç kullanılabilir IP var?
->192.168.1.0 network adresi – 192.168.1.255 broadcast adresidir. Arasında 254 tane kullanılabilir IP
var.
3) Bundan Subnet Mask yapısı kullanarak 4 ayrı network oluşturun.
-> 2^8=256, 256/4=64 alt ağlara bölme yaparken 2 nin katları şeklinde bölünür. Her bölmemizde /24
ümüzü bir arttırırız. Artık /26 şeklinde ağlarımızı yazacağız.
-> 192.168.1.0/26 – 192.168.1.63/26
-> 192.168.1.64/26 – 192.168.1.127/26
-> 192.168.1.128/26 – 192.168.1.191/26
-> 192.168.1.192/26 – 192.168.1.255/26
Soru 192.168.1.70 /26 için
4) Network ve Broadcast adreslerini belirtiniz.
-> Network adresi: 192.168.1.64/26
-> Broadcast adresi: 192.168.1.127/26
Soru 10.10.10.0/24 için
5) 128 IP si olan 2 network oluşturun.
-> 10.10.10.0/25 – 10.10.10.127/25
-> 10.10.10.128/25 – 10.10.10.255/25
6) 64 IP si olan 4 network oluşturun.
-> 10.10.10.0/26 – 10.10.10.63/26
-> 10.10.10.64/26 – 10.10.10.127/26
-> 10.10.10.128/26 – 10.10.10.191/26
-> 10.10.10.192/26 – 10.10.10.255/26
7) 32 IP si olan 8 network oluşturun.
-> 10.10.10.0/27 – 10.10.10.31/27
-> 10.10.10.32/27 – 10.10.10.63/27
-> 10.10.10.64/27 – 10.10.10.95/27
-> 10.10.10.96/27 – 10.10.10.127/27
-> 10.10.10.128/27 – 10.10.10.159/27
-> 10.10.10.160/27 – 10.10.10.191/27
-> 10.10.10.192/27 – 10.10.10.223/27
-> 10.10.10.224/27 – 10.10.10.255/27

Duty Cycle ( Görev Döngüsü )

Elektronikte sistemin aktif olduğu zaman süresinin toplam süreye (Periyot) olan oranıdır.

Görev döngüsü genellikle yüzde veya oran olarak ifade edilir. Periyot, bir sinyalin bir açma-kapama döngüsünü tamamlaması için geçen süredir . Formül olarak, bir görev döngüsü (%) şu şekilde ifade edilebilir:

D görev döngüsüdür, {\görüntüleme stili PW} darbe genişliğidir (darbe aktif süresi) ve T sinyalin toplam periyodudur. Bu nedenle, %60 görev döngüsü, sinyalin zamanın %60’ında açık, ancak zamanın %40’ında kapalı olduğu anlamına gelir. %60’lık bir görev döngüsü için “zamanında”, sürenin uzunluğuna bağlı olarak bir saniyenin kesri, bir gün veya hatta bir hafta olabilir.

Genellikle bir darbenin yüksek olduğu zaman süresini temsil etmek için kullanılır (1). Dijital elektronikte sinyaller, mantık 1 ve mantık 0 ile temsil edilen dikdörtgen dalga biçiminde kullanılır. Mantık 1, bir elektrik darbesinin varlığını ve 0, bir elektrik darbesinin yokluğunu gösterir. Örneğin, bir sinyal (10101010) %50 görev döngüsüne sahiptir, çünkü darbe, dönemin 1/2’si için yüksek veya 1/2’si için düşük kalır. Benzer şekilde, darbe (10001000) için görev döngüsü %25 olacaktır, çünkü darbe yalnızca dönemin 1/4’ü için yüksek kalır ve dönemin 3/4’ü için düşük kalır. 

Frekans: (titreşim sayısı) bir olayın birim zaman (genel olarak 1 saniye) içinde hangi sıklıkla, kaç defa tekrarlandığının ölçümüdür, matematiksel ifadeyle çarpmaya göre tersi ise periyot (T) olarak adlandırılır.

SI birim sisteminde frekans, hertz (Hz) ile gösterilir. Bir Hertz, bir olayın saniyede bir tekrarlandığı anlamına gelir. Olayın iki Hertzlik bir frekansa sahip olması ise, olayın saniyede kendini iki kere yinelediğini ifade eder. Frekansı ölçmenin başka bir yolu ise olayın kendini tekrar etmesi arasında geçen süreyi tayin etmektir zira frekans bu sürenin çarpmaya göre tersi olduğundan dolaylı olarak elde edilebilir. İki yineleme arasında geçen süreye periyot denir ve fizikte genellikle T ile gösterilir.

Amplitude: Genlik, periyodik harekette maksimum düzey olarak tanımlanabilir. Genlik, bir dalganın tepesinden çukuruna kadar olan düşey uzaklığın yarısıdır.

K: https://en.wikipedia.org/wiki/Duty_cycle , https://www.youtube.com/watch?v=ERMAPLVG8Z8 , https://tr.wikipedia.org/wiki/Frekans, https://tr.wikipedia.org/wiki/Genlik