সুচিপত্র:

স্মার্টবিন: 8 টি ধাপ
স্মার্টবিন: 8 টি ধাপ

ভিডিও: স্মার্টবিন: 8 টি ধাপ

ভিডিও: স্মার্টবিন: 8 টি ধাপ
ভিডিও: Голубая стрела (1958) фильм 2024, নভেম্বর
Anonim
স্মার্টবিন
স্মার্টবিন

Este mm projeto para um sistema inteligente de coletas, no qual os caminhões de lixo recebem dados das lixeiras, identificando a quantidade de lixo presente em cada uma delas, e uma rota de coleta traçada, com base nas informações recurades।

প্যারা মন্টার এই প্রজেক্টো, প্রয়োজনীয়তা:

  • NodeMCU
  • সেন্সর Ultrassônico de Distancia
  • Caixa de papelão
  • প্রোটোবোর্ড
  • কাবোস
  • ডিসপোজিটিভো অ্যান্ড্রয়েড

ধাপ 1: কানেক্ট্যান্ডো হে সেন্সর

Primeiramente, vamos efetuar a conexão entre o sensor ultrassônico e o NODEMCU। Para tanto, vamos conectar as portas trigger e echo do sensor nas portas D4 e D3 do NodeMCU:

// পিন সংখ্যা সংজ্ঞায়িত করে #ডিফাইন পিনো_ট্রিগার 2 // ডি 4

#ডিফাইন পিনো_ইকো 0 // ডি 3

Para efetuar a leitura dos dados do sensor, foi seguido o tutorial elaborado pelo FilipeFlop, disponível aqui।

ভাসা cmMsec, inMsec;

দীর্ঘ microsec = ultrasonic.timing ();

cmMsec = ultrasonic.convert (microsec, Ultrasonic:: CM);

inMsec = ultrasonic.convert (microsec, Ultrasonic:: IN);

// Exibe informacoes কোন সিরিয়াল মনিটর

Serial.print ("Distancia em cm:");

Serial.print (cmMsec);

Serial.print (" - Distancia em polegadas:");

Serial.println (inMsec);

স্ট্রিং ডেটা = স্ট্রিং (cmMsec);

Serial.println (তথ্য);

পদক্ষেপ 2: মন্টান্ডো এবং লিক্সেইরা

আগোরা, ভ্যামোস মন্টার এ লিক্সেইরা ইন্টেলিজেন্ট। Precisaremos conectar o sensor ultrassônico no “teto” da lixeira। উদাহরণস্বরূপ, ব্যবহার করুন Em seguida, temos que medir a distância inicial, para saber o valor para a lixeira vazia। কোন মিউ ক্যাসো, ফোই ডি 26, 3 সেমি Esse é o valor que considerarmos para uma lixeira vazia।

Para simulação, visto que não possuo mais de um sensor ultrassônico, foi feito um algoritmo para salvar randomicamente a distancia lida em 4 lixeiras diferentes।

// Simulando 4 lixeiras

দীর্ঘ lixeiraID;

অকার্যকর লুপ () {

lixeiraID = এলোমেলো (1, 5);

}

ধাপ 3: একটি নুভেমের জন্য আপলোড করুন

Agora, precisamos enviar estes dados para a nuvem। Eu escolhi o ThingSpeak, poramilidade com o mesmo। Primeiramente, é essentialário criar um novo canal, recebendo 4 parâmetros, referentes ao volume de cada lixeira

Para conectar a aplicação com o ThingSpeak, é essentialário salvar o número da API do canal criado। Siga os passos descritos কোন সাইট অফিশিয়াল।

De volta à aplicação, vamos utilizar a biblioteca ESP8266WiFi.h para efetuar conexão com o ThingSpeak, e transferir os dados।

Primeiramente, uma função para efetuar conexão com a rede (defina previamente duas variáveis, ssid e pass , contendo o identificador e a senha de sua rede)।

অকার্যকর সংযোগ ওয়াইফাই () {

Serial.print ("কানেক্ট করা হচ্ছে"+ *ssid);

WiFi.begin (ssid, pass);

যখন (WiFi.status ()! = WL_CONNECTED) {

বিলম্ব (500);

সিরিয়াল.প্রিন্ট ("।");

}

Serial.println ("");

Serial.print ("Conectado na rede");

Serial.println (ssid);

সিরিয়াল.প্রিন্ট ("আইপি:");

Serial.println (WiFi.localIP ());

}

Durante o setup, tentamos efetuar a conexão com a rede।

অকার্যকর সেটআপ() {

Serial.begin (9600);

Serial.println ("Lendo dados do sensor…");

// কানেক্ট্যান্ডো এও ওয়াই-ফাই

সংযোগ ওয়াইফাই ();

}

E, para enviar os dados para o ThingSpeak, basta abrir uma conexão HTTP padrão, passando o número da API e os parâmetros।

অকার্যকর sendDataTS (float cmMsec, long id) {

if (client.connect (server, 80)) {

Serial.println ("Enviando dados para o ThingSpeak");

স্ট্রিং postStr = apiKey;

postStr += "& ক্ষেত্র";

postStr += id;

postStr += "=";

postStr += স্ট্রিং (cmMsec);

postStr += "\ r / n / r / n";

Serial.println (postStr);

client.print ("পোস্ট /আপডেট HTTP /1.1 / n");

client.print ("হোস্ট: api.thingspeak.com / n");

client.print ("সংযোগ: বন্ধ / n");

client.print ("X-THINGSPEAKAPIKEY:" + apiKey + "\ n");

client.print ("বিষয়বস্তু-প্রকার: অ্যাপ্লিকেশন/x-www-form-urlencoded / n");

client.print ("বিষয়বস্তু-দৈর্ঘ্য:");

client.print (postStr.length ());

client.print ("\ n / n");

client.print (postStr);

বিলম্ব (1000);

}

client.stop ();

}

O Primeiro parâmetro corresponde à distância em centímetros encontrada pelo sensor ultrassônico। O segundo parâmetro é o ID da lixeira que foi lida (que foi gerado randomicamente, um número de 1 a 4)।

O ID da lixeira também para identificar para qual campo será feito o upload do valor lido।

ধাপ 4: Recuperando Dados Do ThingSpeak

O ThingSpeak permite efetuar leitura dos dados do seu খাল, através de um serviço retornando um JSON। হিসাবে diferentes opções para leitura do feed do seu canal estão descritas aqui:

www.mathworks.com/help/thingspeak/get-a-ch…

Neste projeto, optou-se por ler diretamente os dados de cada campo। O padrão de URL para este cenário é:

api.thingspeak.com/channels/CHANNEL_ID/fields/FIELD_NUMBER/last.json?api_key=API_KEY&status=true

Cada campo está descrito কোন লিঙ্ক informato previamente। ওস মেস গুরুত্বপূর্ণ

  • CHANNEL_ID: número do seu খাল
  • FIELD_NUMBER: o número do campo
  • API_KEY: a chave de API do seu খাল

Esta é a URL que será lida do aplicativa Android, para recuperar os dados do ThingSpeak।

ধাপ 5: অ্যান্ড্রয়েড অ্যাপলিকেশন

অ্যান্ড্রয়েড স্টুডিও নেই, অ্যান্ড্রয়েড ব্যবহার করুন। Para o correto funcionamento da aplicação, é needário configurar as permissões abaixo no AndroidManifest।

গুগল ম্যাপের জন্য ব্যবহার করুন Siga os passos descritos no link Obter chave de API।

Uma vez com a chave, você deve também configurá-la na aplicação।

গুগল ম্যাপ-ভিত্তিক এপিআইগুলির জন্য এপিআই কী স্ট্রিং রিসোর্স হিসাবে সংজ্ঞায়িত করা হয়েছে।

("Res/values/google_maps_api.xml" ফাইলটি দেখুন)।

মনে রাখবেন API কী সাইন ইন করার জন্য ব্যবহৃত এনক্রিপশন কী এর সাথে সংযুক্ত। প্রকাশের জন্য APK- এ সাইন করার জন্য ব্যবহৃত রিলিজ কী সহ প্রতিটি এনক্রিপশন কী -এর জন্য আপনার আলাদা API কী প্রয়োজন। আপনি src/debug/এবং src/release/এ ডিবাগ এবং রিলিজ টার্গেটগুলির জন্য কীগুলি সংজ্ঞায়িত করতে পারেন।

<মেটা-ডেটা

অ্যান্ড্রয়েড: নাম = "com.google.android.geo. API_KEY"

android: value = "@string /google_maps_key" />

একটি কনফিগারেশন সম্পূর্ণভাবে অ্যান্ড্রয়েড ম্যানিফেস্ট অ্যানেক্সাডো এও প্রজেটো।

n

ধাপ:: Recuperando O Feed No Android

অ্যান্ড্রয়েড, মেইনঅ্যাক্টিভিটি, প্রিন্সিপাল এন্ড্রয়েড, মেইন অ্যাক্টিভিটি, ক্রি 4 ভেরিয়েভিস প্যারা আইডেন্টিফিকার ক্যাডা উম ডস ক্যানাইস ডু থিংসস্পিক এ সেরেম লিডোস:

ব্যক্তিগত স্ট্রিং url_a = "https://api.thingspeak.com/channels/429823/fields/1/last.json?api_key="+API_THINGSPEAK_KEY+"&status=true"; ব্যক্তিগত স্ট্রিং url_b = "https://api.thingspeak.com/channels/429823/fields/2/last.json?api_key="+API_THINGSPEAK_KEY+"&status=true"; ব্যক্তিগত স্ট্রিং url_c = "https://api.thingspeak.com/channels/429823/fields/3/last.json?api_key="+API_THINGSPEAK_KEY+"&status=true"; ব্যক্তিগত স্ট্রিং url_d = "https://api.thingspeak.com/channels/429823/fields/4/last.json?api_key="+API_THINGSPEAK_KEY+"&status=true";

Para efetuar a leitura dos dados, iremos utilizar uma classe do Android específica, chamada JSONObject। Mais uma vez, vamos criar um objeto para cada URL:

JSONObject responseLixeiraA; JSONObject responseLixeiraB; JSONObject responseLixeiraC; JSONObject responseLixeiraD;

Para abrir a conexão com urls হিসাবে, vamos usar criar uma classe auxiliar, chamada HttpJsonParser। Esta classe será responsável por abrir uma conexão com um URL, efetuar leitura dos dados encontrados, e retornar o objeto JSON montado।

পাবলিক JSONObject makeHttpRequest (স্ট্রিং url, স্ট্রিং পদ্ধতি, ম্যাপ প্যারাম) {

চেষ্টা করুন {

Uri. Builder builder = নতুন Uri. Builder (); URL urlObj; স্ট্রিং এনকোডেড প্যারাম = ""; যদি (params! = null) {for (Map. Entry entry: params.entrySet ()) {builder.appendQueryParameter (entry.getKey (), entry.getValue ()); }} if (builder.build ()। getEncodedQuery ()! = null) {encodedParams = builder.build ()। getEncodedQuery ();

}

যদি ("GET"। সমতুল্য (পদ্ধতি)) {url = url + "?" + এনকোডেড প্যারামস; urlObj = নতুন URL (url); urlConnection = (HttpURLConnection) urlObj.openConnection (); urlConnection.setRequestMethod (পদ্ধতি);

} অন্য {

urlObj = নতুন URL (url); urlConnection = (HttpURLConnection) urlObj.openConnection (); urlConnection.setRequestMethod (পদ্ধতি); urlConnection.setRequestProperty ("বিষয়বস্তু-প্রকার", "অ্যাপ্লিকেশন/x-www-form-urlencoded"); urlConnection.setRequestProperty ("Content-Length", String.valueOf (encodedParams.getBytes ()। length)); urlConnection.getOutputStream ()। লিখুন (encodedParams.getBytes ()); } // সার্ভারের সাথে সংযুক্ত করুন urlConnection.connect (); // প্রতিক্রিয়া পড়ুন = urlConnection.getInputStream (); BufferedReader পাঠক = নতুন BufferedReader (নতুন InputStreamReader (হয়)); StringBuilder sb = নতুন StringBuilder (); স্ট্রিং লাইন;

// প্রতিক্রিয়া বিশ্লেষণ করুন

while ((line = reader.readLine ())! = null) {sb.append (line + "\ n"); } আপনি উত্তর দিবেন না(); json = sb.toString (); // প্রতিক্রিয়াকে JSON অবজেক্টে পরিবর্তন করুন jObj = নতুন JSONObject (json);

} ধরা (UnsupportedEncodingException e) {

e.printStackTrace (); } ধরা (ProtocolException e) {e.printStackTrace (); } ধরা (IOException e) {e.printStackTrace (); } catch (JSONException e) {Log.e ("JSON Parser", "Error parseing data" + e.toString ()); } catch (Exception e) {Log.e ("Exception", "Error parseing data" + e.toString ()); }

// JSON অবজেক্ট ফিরিয়ে দিন

ফিরে jObj;

}

}

De volta a atividade প্রধান, Vamos efetuar a chamada urs urls de forma assíncrona, escrevendo este código dentro do método doInBackground।

Ver ওভাররাইড সুরক্ষিত স্ট্রিং doInBackground (স্ট্রিং… params) {HttpJsonParser jsonParser = নতুন HttpJsonParser ();

responseLixeiraA = jsonParser.makeHttpRequest (url_a, "GET", null);

responseLixeiraB = jsonParser.makeHttpRequest (url_b, "GET", null); responseLixeiraC = jsonParser.makeHttpRequest (url_c, "GET", null); responseLixeiraD = jsonParser.makeHttpRequest (url_d, "GET", null);

শূন্য ফেরত;}

Quando o método doInBackgroundé encerrado, o controle de execução do Android passa para o método onPostExecute। Neste método, vamos criar os objetos Lixeira, e জনপ্রিয় com os dados recuperados do ThingSpeak:

সুরক্ষিত শূন্যতা onPostExecute (স্ট্রিং ফলাফল) {pDialog.dismiss (); runOnUiThread (নতুন Runnable () {public void run () {

// ListView listView = (ListView) findViewById (R.id.feedList);

দেখুন mainView = (দেখুন) findViewById (R.id.activity_main); if (success == 1) {try {// Cria feedDetail para cada lixeira Lixeira feedDetails1 = new Lixeira (); Lixeira feedDetails2 = নতুন Lixeira (); Lixeira feedDetails3 = নতুন Lixeira (); Lixeira feedDetails4 = নতুন Lixeira ();

feedDetails1.setId ('A');

feedDetails1.setPesoLixo (Double.parseDouble (responseLixeiraA.getString (KEY_FIELD1))); feedDetails1.setVolumeLixo (Double.parseDouble (responseLixeiraA.getString (KEY_FIELD1)));

feedDetails2.setId ('B');

feedDetails2.setPesoLixo (Double.parseDouble (responseLixeiraB.getString (KEY_FIELD2))); feedDetails2.setVolumeLixo (Double.parseDouble (responseLixeiraB.getString (KEY_FIELD2)));

feedDetails3.setId ('C');

feedDetails3.setPesoLixo (Double.parseDouble (responseLixeiraC.getString (KEY_FIELD3))); feedDetails3.setVolumeLixo (Double.parseDouble (responseLixeiraC.getString (KEY_FIELD3)));

feedDetails4.setId ('ডি');

feedDetails4.setPesoLixo (Double.parseDouble (responseLixeiraD.getString (KEY_FIELD4))); feedDetails4.setVolumeLixo (Double.parseDouble (responseLixeiraD.getString (KEY_FIELD4)));

feedList.add (feedDetails1);

feedList.add (feedDetails2); feedList.add (feedDetails3); feedList.add (feedDetails4);

// ক্যালকুলা দাদোস দাস লিক্সিরাস

SmartBinService ক্যালকুলেটর = নতুন SmartBinService (); calculator.montaListaLixeiras (feedList);

// Recupera উপাদান

TextView createDate = (TextView) mainView.findViewById (R.id.date); ListView listaDeLixeiras = (ListView) findViewById (R.id.lista); adapter.addAll (feedList);

// ডেটা অ্যাটুয়াল

তারিখ currentTime = Calendar.getInstance ()। GetTime (); SimpleDateFormat simpleDate = new SimpleDateFormat ("dd/MM/yyyy"); স্ট্রিং currentDate = simpleDate.format (currentTime); createDate.setText (KEY_DATE + currentDate + ""); listaDeLixeiras.setAdapter (অ্যাডাপ্টার);

} ধরা (JSONException e) {

e.printStackTrace (); }

} অন্য {

Toast.makeText (MainActivity.this, "ডেটা লোড করার সময় কিছু ত্রুটি ঘটেছে", Toast. LENGTH_LONG)

}

} }); }

Agora, na tela inicial do aplicativo, serão listados os dados de cada lixeira।

ধাপ 7: মোস্ট্রান্ডো নো ম্যাপা

মোস্ট্রান্ডো নো ম্যাপা
মোস্ট্রান্ডো নো ম্যাপা

Ainda na atividade প্রধান, vamos adicionar uma ação a ser relacionada ao botão Mapa, na tela inicial।

/ ** কল করা হয় যখন ব্যবহারকারী ম্যাপা বোতাম*/ পাবলিক অকার্যকর openMaps (দেখুন দেখুন) ট্যাপ করে

// পাসা একটি তালিকা de lixeiras

বান্ডিল বান্ডেল = নতুন বান্ডেল (); bundle.putParcelableArrayList ("lixeiras", feedList); inte.putExtras (বান্ডিল);

startActivity (অভিপ্রায়);

}

কোন ম্যাপ নেই, টেমোস ট্রাইস একজন এক্সিকিউটারের উপর নির্ভর করে:

  1. marcar a posição atual do caminha de lixo
  2. marcar os pontos correspondentes a cada lixeira no mapa
  3. traçar a rota entre os pontos

প্যারা এক্সিকিউটার os passos acima, vamos usar a API Google Directions। রোটা হিসাবে প্যারা ডেসেনহার, ফোরাম সেগুইডোস ওএস পাসোস টিউটোরিয়াল গুগল ম্যাপ অ্যান্ড্রয়েড এপিআই ভি 2 এ গুগল ডাইরেকশন ব্যবহার করে দুটি অবস্থানের মধ্যে ড্রাইভিং রুটের দিকনির্দেশনা আঁকছে

Primeiro, vamos criar localidades para cada um dos pontos que desejamos marcar:

// অবস্থান

ব্যক্তিগত LatLng বর্তমান;

ব্যক্তিগত LatLng lixeiraA; ব্যক্তিগত LatLng lixeiraB; ব্যক্তিগত LatLng lixeiraC; ব্যক্তিগত LatLng lixeiraD;।

Para adicionar a posição atual no mapa, foi criado o método:

Private void checkLocationandAddToMap () {// ব্যবহারকারী অনুমতি দিয়েছে কিনা তা পরীক্ষা করা হচ্ছে (ActivityCompat.checkSelfPermission (this, android. Manifest.permission. ACCESS_FINE_LOCATION)! ACCESS_COARSE_LOCATION! প্রত্যাবর্তন; }

// Fus ব্যবহার করে সর্বশেষ পরিচিত অবস্থান আনা

অবস্থানের অবস্থান = LocationServices. FusedLocationApi.getLastLocation (googleApiClient);

// MarkerOptions একটি নতুন Marker তৈরি করতে ব্যবহার করা হয়। আপনি MarkerOptions দিয়ে অবস্থান, শিরোনাম ইত্যাদি নির্দিষ্ট করতে পারেন।

this.current = নতুন LatLng (location.getLatitude (), location.getLongitude ()); MarkerOptions markerOptions = নতুন MarkerOptions ()। অবস্থান (বর্তমান).শিরোনাম ("Posição atual");

// ম্যাপে তৈরি করা মার্কার যুক্ত করা, ক্যামেরাটিকে অবস্থানে সরানো

markerOptions.icon (BitmapDescriptorFactory.defaultMarker (BitmapDescriptorFactory. HUE_GREEN)); System.out.println ("+++++++++++++++++++++++++++++++++++" "; mMap.addMarker (markerOptions);

// 15 এর জুম সহ ক্যামেরাটি তাত্ক্ষণিকভাবে অবস্থানে সরান।

mMap.moveCamera (CameraUpdateFactory.newLatLngZoom (বর্তমান, 15 %));

// জুম ইন, ক্যামেরা অ্যানিমেশন।

mMap.animateCamera (CameraUpdateFactory.zoomTo (14), 2000, null);

}

Em seguida, para cada lixeira, foram criados métodos similares ao abaixo:

ব্যক্তিগত অকার্যকর addBinALocation () {// ব্যবহারকারী অনুমতি দিয়েছেন কিনা তা পরীক্ষা করা হচ্ছে (ActivityCompat.checkSelfPermission (this, android. Manifest.permission. ACCESS_FINE_LOCATION)! ACCESS_COARSE_LOCATION! প্রত্যাবর্তন; }

// Praça da Estação

দ্বিগুণ অক্ষাংশ = -19.9159578; দ্বিগুণ দ্রাঘিমাংশ = -43.9387856; this.lixeiraA = নতুন LatLng (অক্ষাংশ, দ্রাঘিমাংশ);

MarkerOptions markerOptions = নতুন MarkerOptions ()। অবস্থান (lixeiraA).শিরোনাম ("Lixeira A");

markerOptions.icon (BitmapDescriptorFactory.defaultMarker (BitmapDescriptorFactory. HUE_RED)); mMap.addMarker (markerOptions); }

Posições de latitude e longitude de cada lixeira foram recuperadas através do próprio Google Maps, e deixadas fixas no código। Idealmente, estes valores ficariam salvos em um banco de dados (উদাহরণস্বরূপ ফায়ারবেস)। Será a primeira evolução deste projeto!

O último passo agora é traçar as rotas entre os pontos। Para tal, um conceito muito importante, e que será utilizado neste projeto, são os Waypoints!

Foi criado um método para traçar a rota entre dois dados pontos:

ব্যক্তিগত স্ট্রিং getDirectionsUrl (LatLng Origin, LatLng dest, List waypointsList) {

// রুটের উৎপত্তি

স্ট্রিং str_origin = "origin ="+origin.latitude+","+origin.longitude;

// রুটের গন্তব্য

স্ট্রিং str_dest = "গন্তব্য ="+dest.latitude+","+dest.longitude;

// রুট বরাবর ওয়েপয়েন্ট

//waypoints=optimize:true|-19.9227365, -43.9473546 | -19.9168006, -43.9361124 স্ট্রিং ওয়েপয়েন্ট = "ওয়েপয়েন্টস = অপ্টিমাইজ: ট্রু"; জন্য (LatLng পয়েন্ট: waypointsList) {waypoints += "|" + point.latitude + "," + point.longitude; }

// সেন্সর সক্ষম

স্ট্রিং সেন্সর = "সেন্সর = মিথ্যা";

// ওয়েব পরিষেবাতে প্যারামিটার তৈরি করা

স্ট্রিং প্যারামিটার = str_origin+"&"+str_dest+"&"+sensor+"&"+waypoints;

// আউটপুট ফরমেট

স্ট্রিং আউটপুট = "json";

// ওয়েব পরিষেবাতে url তৈরি করা

স্ট্রিং url = "https://maps.googleapis.com/maps/api/directions/"+output+"?"+parameters; System.out.println ("+++++++++++++++"+url);

url ফেরত দিন;

}

E, por fim, juntando tudo no método প্রধান da classe, onMapReady:

MOverride public void onMapReady (GoogleMap googleMap) {mMap = googleMap;

checkLocationandAddToMap ();

যদি (lixeirasList.get (0).getVolumeLixo ()> Lixeira. MIN_VOLUME_GARBAGE

|| lixeirasList.get (0).getPesoLixo ()-10> Lixeira. MIN_SIZE_GARBAGE) {addBinALocation (); } if (lixeirasList.get (1).getVolumeLixo ()> Lixeira. MIN_VOLUME_GARBAGE || lixeirasList.get (1).getPesoLixo ()> Lixeira. MIN_SIZE_GARBAGE) {addBinBLocation (); } if (lixeirasList.get (2).getVolumeLixo ()> Lixeira. MIN_VOLUME_GARBAGE || lixeirasList.get (2).getPesoLixo ()> Lixeira. MIN_SIZE_GARBAGE) {addBinCLocation (); } if (lixeirasList.get (3).getVolumeLixo ()> Lixeira. MIN_VOLUME_GARBAGE || lixeirasList.get (3).getPesoLixo ()> Lixeira. MIN_SIZE_GARBAGE) {addBinDLocation (); }

// রুট আঁকুন

// গুগল দিকনির্দেশ API- এ URL পাওয়া

তালিকা পয়েন্ট = নতুন ArrayList (); points.add (lixeiraB); points.add (lixeiraC); points.add (lixeiraD);

স্ট্রিং url = getDirectionsUrl (বর্তমান, lixeiraA, পয়েন্ট);

ডাউনলোড টাস্ক ডাউনলোড টাস্ক = নতুন ডাউনলোড টাস্ক (); // Google Directions API downloadTask.execute (url) থেকে json ডেটা ডাউনলোড করা শুরু করুন; }

Aqui passamos apenas pelos pontos Principais। O código completo do projeto será disponibilizado para consulta।

ধাপ 8: উপসংহার

Este foi um projeto trabalhando conceitos de IoT, mostrando uma das várias opções de conectar dispositivos através da nuvem, e efetuar tomada de decisões sem interferência humana direta। Em anexo, segue um vídeo do projeto completo, para ilustração, e os fontes das atividades criadas no Android।

প্রস্তাবিত: