Intel IoT Roadshow’da 3.lük!

Herkese merhaba!

Bertuğ ile geliştirdiğimiz proje Bahçeşehir Üniversitesi Robot ve Proje Günleri’nde 1.seçilmişti. Şurada bahsetmiştim: https://fatihdumanli.com/microsoft-student-partnerlardan-bir-derece-daha/

Aynı projeyle Berlin’de düzenlenen Intel IoT Roadshow hackathonuna katıldık ve orada da 130 proje arasından 3.lük elde ettik 🙂

Müthiş bir gurur, müthiş bir mutluluk bu, stay tuned 🙂

Detaylı bilgi: https://bertugberkay.wordpress.com/2015/05/06/intel-iot-roadshow-berlin-internet-of-coffee-3-lugu/

Fazlasını Oku

Intel Edison üzerinde Azure Service Bus Queue

Merhaba arkadaşlar,

Bir önceki yazımda Azure Service Bus’ı örnek senaryolarla birlikte elimden geldiğince açıklamaya çalışmıştım. Bu yazımda Intel Edison üzerinden Azure Service Bus Namespace’imizde bulunan bir Queue’ya nasıl veri aktarırız onu anlatmaya çalışacağım.

Bu yazının amacı gereği mesajı bir Intel Edison cihazdan göndereceğiz, bir Console Application‘dan mesajları consume edeceğiz. Yazının bu kısmından sonrasını biraz daha az detaylı anlatacağım, en sonda kaynak kodları paylaşacağım.

Intel Edison üzerinde mesaj gönderecek olan uygulamamızı yazmak için Nodejs kullanacağız. Çünkü Arduino’nun WifiClient, WebClient kütüphanelerinde SSL bağlantıları kuramıyoruz.

Message Sender’ı hazırlayalım

Eğer daha önce hiç Nodejs kullanmadıysanız, sadece beginner seviyesinde olduğumdan sizleri yanlış yönlendirmek istemiyorum. Nodejs hakkında güzel bir giriş yazısı buldum: http://blog.ilkerguller.com/2012/01/nodejs-dersleri-bolum-1-kurulum-ve-ilk.html

Öncelikle Node commant prompt’u açalım ve aşağıdakileri sırasıyla yazalım;

> cd c:\
> mkdir serviceBusMessageSender
> cd serviceBusMessageSender

> npm init

Buradan sonra name, description, version, entry point gibi bilgiler sorulacak. Bunları girdikten sonra;
> touch [entrypoint] yazmanız gerekecek. Örneğin touch index.js.

Böylelikle uygulamamızın giriş noktasını oluşturduk. Şimdi bazı paketler yüklememiz gerekecek.

Uygulamayı oluşturduğumuz dizine gittikten sonra(serviceBusMessageSender) npm’den aşağıdaki paketleri yüklememiz gerekecek.

azure

Nodejs uygulamarında azure servislerini kullanmak için ‘azure’ pakedini yüklememiz gerekiyor.

cylon
cylon-gpio
cylon-i2c
cylon-intel-iot

Cylon paketleri ise bir Nodejs uygulamasından Edison cihazını kontrol edebilmek için kullanıyoruz. 4’ünü birden yüklememiz gerekiyor, birbirine bağımlı paketler. (http://cylonjs.com/)

Bu paketleri de yükledikten sonra entry pointimizi(index.js, app.js veya her ne ise) not defterinde açalım.

index.js
——————–

var azure = require('azure');
var Cylon = require('cylon');

var connstring = 'Endpoint=sb://xxxxx.servicebus.windows.net/;SharedAccessKeyName=RootManageSharedAccessKey;SharedAccessKey=xxxxx';
var serviceBusClient = azure.createServiceBusService(connstring);


var message = {
 customProperties: {
        TestProperty: new Date()
   }
   };

Cylon.robot({
  connections: {
    edison: { adaptor: "intel-iot" }
  },

  devices: {
    button: { driver: "button", pin: 2 }
  },

  work: function(my) {
    my.button.on("push", function () {
		serviceBusClient.sendQueueMessage('edisondataqueue', message, function(error){
    if(!error){
        // message sent
    }
});

 });
  }
}).start();

Yukarıda öncelikle yüklediğimiz kütüphanelerin referanslarını aldık. Ve daha sonra Service Bus Namespace’imizin connectionString’ini tanımladık. Bu key’i Azure Portal’dan Service Bus Namespace’inize girdikten sonra manage keys bölümünden edinebilirsiniz.

Ve Azure Service Bus üzerinde herhangi bir işlem yapmamıza olanak sağlayan serviceBusClient sınıfından bir nesne türettik.

Cylon paketi sayesinde edison bağlantımızı, cihazlarımızı ve cihaz üzerinde çalışacak fonksiyonelliği tanımladık. PIN 2’deki butonumuza basıldığında yapılacak olan işi tanımladığımız fonksiyonun içinde ise, henüz tanımladığımız serviceBusClient nesnesinin sendQueueMessage metodunu çağırarak Service Bus’taki Queue’muza mesajımızı gönderdik.

Şimdi uygulamamızı edison üzerine göndereceğiz.

Öncelikle edison üzerinde uygulamamız için bir klasör oluşturalım.

> ssh root@192.168.x.x
> mkdir servicebusapp

WinSCP(http://winscp.net/eng/download.php)’yi yükledikten sonra aşağıdaki kodu prompt’a yazarak uygulamamızı Intel Edison’a göndereceğiz ve çalışabilir hale gelecek.

> scp -r serviceBusMessageSender root@192.168.x.x:/home/wwwroot/servicebusapp

Bu komuttan sonra bir süre sonra uygulamamız gönderilmiş olacak.

> cd servicebusapp
> node index.js

Ve uygulamamız çalışıyor, pin 2’deki  butona bastığınızda Service Bus’a mesajın gönderildiğini göreceksiniz.

Consumer uygulamamızı hazırlayalım

  • Consumer uygulamamız C# Console Application olacak. Visual Studio’dan File -> New Project -> Console Application ile uygulamamızı oluşturalım.
  • Solution Explorer‘da projenin üzerine sağ tıklayıp Manage Nuget Packages‘e tıklayalım.
  • service bus‘ yazıp aratalım ve ilk sırada çıkan paketi yükleyelim. Şu anki sürüm: 2.6.5

Paket yüklendikten sonra app.config dosyasında Service Bus Namespace’imiz için ConnectionString’i ayarlamamız gerekiyor.

<appSettings>
<add key="Microsoft.ServiceBus.ConnectionString"
value="Endpoint=sb://xxxxxxx.servicebus.windows.net/;SharedAccessKeyName=RootManageSharedAccessKey;SharedAccessKey=xxxxxxxx="/>
</appSettings>

 

Program.cs
——————————————–

class Program
    {
        static string _connStr = CloudConfigurationManager.GetSetting("Microsoft.ServiceBus.ConnectionString");
        static void Main(string[] args)
        {
            QueueClient qc = QueueClient.CreateFromConnectionString(_connStr, "edisondataqueue");

            OnMessageOptions options = new OnMessageOptions();
            options.AutoComplete = false;
            options.AutoRenewTimeout = TimeSpan.FromMinutes(1);

            qc.OnMessage((message) =>
            {
                Console.WriteLine("NEW MESSAGE");
                Console.WriteLine("MessageID: " + message.MessageId);
                Console.WriteLine(message.Properties["testproperty"]);
                Console.WriteLine();
                Console.WriteLine();

                
                message.Complete();
            });

            Console.Read();

        }
    }

Uygulamayı derleyip çalıştıralım. Edison üzerinde butona basıldığında Console Uygulamamıza mesajın geldiğini göreceğiz.

Projenin tamamı: http://1drv.ms/1OjAEn6

Bu yazıda Intel Edison üzerinden Service Bus’ta bulunan bir Queue’ya mesaj gönderdik. Faydalı olması dileğiyle.

Fazlasını Oku