ዝርዝር ሁኔታ:

SmartBin: 8 ደረጃዎች
SmartBin: 8 ደረጃዎች

ቪዲዮ: SmartBin: 8 ደረጃዎች

ቪዲዮ: SmartBin: 8 ደረጃዎች
ቪዲዮ: 8 часов расслабляющей музыки для сна, которая поможет снять стресс • Красивая фортепианная музыка 2024, ህዳር
Anonim
ስማርትቢን
ስማርትቢን

Este é um 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 recuperadas.

ፓራ ሞንታር ፕሮጄቶ ፣ እና አስፈላጊ -

  • NodeMCU
  • ዳሳሽ Ultrassônico de Distancia
  • Caixa de papelão
  • ፕሮቶቦርድ
  • ካቦስ
  • Android ን ያውርዱ

ደረጃ 1: Conectando O ዳሳሽ

Primeiramente, vamos efetuar a conexão entre o sensor ultrassônico e o NODEMCU. ፓራ ታንቶ ፣ ቫሞስ ኮንቴክታር እንደ ፖርታስ ማስነሻ እና ዳሰሳ ዳሳሾች እና ወደቦች D4 እና D3 NodeMCU

// የፒን ቁጥሮችን #ይገልጻል pino_trigger 2 // D4

#ጥራት ያለው ፒኖ_ሴቾ 0 // D3

ይህንን ለማድረግ ሌንስታ ዶስ ዳዶስ ፣ ዳሳሽ ፣ ዳዮ ዳውዝ ማድረግ ፣ የማጠናከሪያ ትምህርት ኤላቦራዶ ፔሎ ፊሊፔፍሎፕ ፣ ሌላውን ማስተላለፍ።

ተንሳፋፊ cmMsec ፣ inMsec;

ረጅም ማይክሮ ሰከንድ = ለአልትራሳውንድ። ሰዓት ();

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

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

// Exibe ምንም ተከታታይ ክትትል የለውም

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. ለምሳሌ ፣ ለምሳሌ ፣ ካባን እና ፊትን ማግለል። ኢሜ ሴጉይዳ ፣ ቴሞስ ኬር ሜዲር በተርታ ኢንሺያ ፣ ፓራ ሳቤር ወይም ደፋር ለሊሴራ ቫዚያ። የለም ፣ ምንም 26 ፣ 3 ሴሜ የለም። Esse é o valor que considerrarmos para uma lixeira vazia.

ፓራ 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.

// ሲሙላንዶ 4 lixeiras

ረጅም lixeiraID;

ባዶነት loop () {

lixeiraID = በዘፈቀደ (1 ፣ 5);

}

ደረጃ 3 - ፓራ አንድ ኑዌምን ይስቀሉ

Agora, precisamos enviar estes dados para a nuvem. ዩ ኤስኮሊ ወይም ThingSpeak ፣ በፎርሚዳዴድ ኮም o mesmo። Primeiramente ፣ é necessário criar um novo canal, recebendo 4 parâmetros, referentes ao volume de cada lixeira.

በ ‹ThingSpeak› ፣ በ ‹ኤፒአይ› ቦይ ክሪአዶን ያስተዋውቁ። Siga os passos descritos ምንም ጣቢያ የለም።

ደ 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).

ባዶነት connectWifi () {

Serial.print ("ከ"+ *ssid ጋር በመገናኘት ላይ);

WiFi.begin (ssid ፣ ማለፍ);

ሳለ (WiFi.status ()! = WL_CONNECTED) {

መዘግየት (500);

Serial.print (".");

}

Serial.println ("");

Serial.print ("Conectado na rede");

Serial.println (ssid);

Serial.print ("IP:");

Serial.println (WiFi.localIP ());

}

ዱራንቴ o ማዋቀር ፣ ድንኳን ተደጋግሞ እና ተገናኝቶ።

ባዶነት ማዋቀር () {

Serial.begin (9600);

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

// Conectando ao Wi-Fi

connectWifi ();

}

E ፣ para enviar os dados para o ThingSpeak ፣ basta abrir uma conexão HTTP padrão ፣ passando o número da API እና os parâmetros።

ባዶ ላክ ውሂብ (ተንሳፋፊ cmMsec ፣ ረጅም መታወቂያ) {

ከሆነ (client.connect (አገልጋይ ፣ 80)) {

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

ሕብረቁምፊ ልጥፍ Str = apiKey;

postStr += "& መስክ";

postStr += id;

postStr += "=";

postStr += ሕብረቁምፊ (cmMsec);

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

Serial.println (postStr);

client.print ("POST /update HTTP /1.1 / n");

client.print ("አስተናጋጅ: api.thingspeak.com / n");

client.print ("ግንኙነት ፦ close / 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)።

ኦ መታወቂያ እና ሊክኢራራ ለታምፓም ፓራ ለይቶ ለፓራ ካምፖ ሴራ ፌይኦኦ ኦፕሎድ ያድርጉ።

ደረጃ 4 Recuperando Dados Do ThingSpeak

ኦ ThingSpeak permite efetuar leitura dos dados do seu canal, atraves de um serviço retornando um JSON. እንደ ልዩነቱ ለፓራቱራቱ ምግብ እንደሚሰጥ የባህር ሰርጥ ኢስትኦ 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

ዳዴ ካምፖ ኢስታ ዲክሪቶ ምንም አገናኝ መረጃ አዋቂ የለም። ኦስ mais importantes para o projeto são:

  • CHANNEL_ID ፦ número do seu ቦይ
  • FIELD_NUMBER: o numero do campo
  • ኤፒአይ_ኬይ - አንድ chave de API do seu ቦይ

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

ደረጃ 5: Criando a Aplicação Android

ምንም የ Android ስቱዲዮ የለም ፣ አንድም Android ን በ projeto አይመለከትም። ለፓራኮ ኮንትራክተሩ ዳፕሊኬሽን ዳ አፕሊኬሽን ፣ እንደአስፈላጊነቱ AndroidManifest ን እንደአቅጣጫው ያዋቅራል።

የጉግል ካርታዎች ፣ ጉግል ካርታ። Siga os passos descritos ምንም አገናኝ Obter chave de API.

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

ለ Google ካርታዎች-ተኮር ኤፒአይዎች የኤፒአይ ቁልፍ እንደ ሕብረቁምፊ ሀብት ይገለጻል።

(ፋይሉን "res/values/google_maps_api.xml" ይመልከቱ)።

የኤፒአይ ቁልፍ ኤፒኬውን ለመፈረም ጥቅም ላይ ከሚውለው የኢንክሪፕሽን ቁልፍ ጋር የተገናኘ መሆኑን ልብ ይበሉ። ኤፒኬውን ለማተም የሚያገለግል የመልቀቂያ ቁልፍን ጨምሮ ለእያንዳንዱ የኢንክሪፕሽን ቁልፍ የተለየ የኤፒአይ ቁልፍ ያስፈልግዎታል። በ src/debug/እና src/release/ውስጥ ለማረም እና ለመልቀቅ ዒላማዎች ቁልፎችን መግለፅ ይችላሉ።

<ሜታ-ውሂብ

android: ስም = "com.google.android.geo. API_KEY"

android: እሴት = "@string /google_maps_key" />

የ AndroidManifest anexado ao projeto ን ያጠናቅቃል።

n

ደረጃ 6: Recuperando O Feed No Android

በ Android ፣ MainActivity ፣ crie 4 variáveis para identificar of cada um dos canais ማድረግ ThingSpeak a serem lidos:

የግል ሕብረቁምፊ 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";

ፓራ ኢትቱዋር አንድ ሌቱራ ዶስ ዳዶስ ፣ አይሪሞስ ለ 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 as urls, vamos usar criar uma umasese 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 (String url ፣ String method ፣ Map params) {

ሞክር {

Uri. Builder ግንበኛ = አዲስ Uri. Builder (); ዩአርኤል urlObj; ሕብረቁምፊ encodedParams = ""; ከሆነ (ግቤቶች! }} ከሆነ (builder.build (). getEncodedQuery ()! = null) {encodedParams = builder.build (). getEncodedQuery ();

}

ከሆነ ("GET".equals (ዘዴ)) {url = url + "?" + encodedParams; urlObj = አዲስ ዩአርኤል (url); urlConnection = (HttpURLConnection) urlObj.openConnection (); urlConnection.setRequestMethod (ዘዴ);

} ሌላ {

urlObj = አዲስ ዩአርኤል (url); urlConnection = (HttpURLConnection) urlObj.openConnection (); urlConnection.setRequestMethod (ዘዴ); urlConnection.setRequestProperty ("የይዘት ዓይነት" ፣ "ትግበራ/x-www-form-urlencoded"); urlConnection.setRequestProperty ("የይዘት-ርዝመት" ፣ String.valueOf (encodedParams.getBytes (). ርዝመት)); urlConnection.getOutputStream ()። ይፃፉ (encodedParams.getBytes ()); } // ከአገልጋዩ ጋር ይገናኙ urlConnection.connect (); // መልሱን ያንብቡ = urlConnection.getInputStream (); BufferedReader አንባቢ = አዲስ BufferedReader (አዲስ InputStreamReader (ነው)); StringBuilder sb = አዲስ StringBuilder (); ሕብረቁምፊ መስመር;

// ምላሹን ይለዩ

ሳለ ((መስመር = አንባቢ.readLine ())! = ባዶ) {sb.append (መስመር + "\ n"); } ዝግ ነው (); json = sb.toString (); // ምላሹን ወደ JSON Object jObj = new JSONObject (json) ይለውጡ ፤

} መያዝ (የማይደገፍ ኢኮዲንግ ኢክሳይሽን ሠ) {

e.printStackTrace (); } መያዝ (ProtocolException e) {e.printStackTrace (); } መያዝ (IOException e) {e.printStackTrace (); } መያዝ (JSONException e) {Log.e ("JSON Parser" ፣ "Data analysis of error" + e.toString ()); } መያዝ (ልዩ ሠ) {Log.e (“ልዩ” ፣ “መረጃን መተንተን ስህተት” + e.toString ()); }

// JSON ን ይመልሱ

ተመለስ jObj;

}

}

ደ ቮልታ እና አቲቪዴድ ርዕሰ መምህር ፣ ቫሞስ ኤፌቱር አንድ ቻማዳ urs de forma assíncrona ፣ escrevendo este código dentro do método doInBackground.

@Override የተጠበቀ String doInBackground (String… params) {HttpJsonParser jsonParser = new HttpJsonParser ();

responseLixeiraA = jsonParser.makeHttpRequest (url_a ፣ “GET” ፣ ባዶ)

responseLixeiraB = jsonParser.makeHttpRequest (url_b ፣ “GET” ፣ ባዶ) responseLixeiraC = jsonParser.makeHttpRequest (url_c ፣ “GET” ፣ ባዶ); responseLixeiraD = jsonParser.makeHttpRequest (url_d ፣ “GET” ፣ ባዶ)

ተመለስ ባዶ;}

በ ‹Backgroundé encerrado ›፣ ወይም በ ‹PostExecute› ላይ የ Android passa para o método ን ለማዘመን። Neste método, vamos criar os objetos Lixeira, e popular com os dados recuperados do ThingSpeak:

የተጠበቀ ባዶነት በ ‹PostExecute ›(የገመድ ውጤት) {pDialog.dismiss (); runOnUiThread (አዲስ Runnable () {public void run () {

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

MainView = (ይመልከቱ) findViewById (R.id.activity_main) ን ይመልከቱ ፤ ከሆነ (ስኬት == 1) {ይሞክሩ {// 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 ('ለ');

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 ('D');

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);

// የሬኩፔራ ክፍሎች

TextView createDate = (TextView) mainView.findViewById (R.id.date); ListView listaDeLixeiras = (ListView) findViewById (R.id.lista); አስማሚ.addAll (feedList);

// የውሂብ ትክክለኛ

ቀን currentTime = Calendar.getInstance (). GetTime (); SimpleDateFormat simpleDate = አዲስ SimpleDateFormat ("dd/MM/yyyy"); ሕብረቁምፊ currentDate = simpleDate.format (currentTime); createDate.setText (KEY_DATE + currentDate + ""); listaDeLixeiras.setAdapter (አስማሚ);

} ይያዙ (JSONException e) {

e.printStackTrace (); }

} ሌላ {

Toast.makeText (MainActivity.this ፣ “ውሂብ በመጫን ጊዜ አንዳንድ ስህተት ተከስቷል” ፣ ቶስት. LENGTH_LONG)። አሳይ ();

}

} }); }

አጎራ ፣ እና በቴላ ተደራጅተው aplicativo ፣ serão listados os dados de cada lixeira።

ደረጃ 7: Mostrando No Mapa

Mostrando No Mapa
Mostrando No Mapa

አይንዳ እና የአቲቪዲዴ ርዕሰ መምህር ፣ ቫሞስ አድሲዮናር uma ação a ser relacionada ao botão Mapa ፣ እና tela inicial።

/ ** ተጠቃሚው የማፓ አዝራሩን መታ ሲያደርግ ተጠርቷል*/ የህዝብ ባዶ ክፍት ካርታዎች (እይታ ይመልከቱ) {Intent intention = new Intent (ይህ ፣ LixeiraMapsActivity.class) ፤

// ፓስሳ አንድ ሊስታ ዴ ሊክስራስ

የጥቅል ጥቅል = አዲስ ቅርቅብ (); bundle.putParcelableArrayList ("lixeiras", feedList); intention.putExtras (ጥቅል);

ጅምር እንቅስቃሴ (ዓላማ);

}

ማፓ የለም ፣ አንድ ሰው አስፈፃሚውን ያካሂዳል-

  1. marcar a posição atual do caminha de lixo
  2. ማርካር ኦስ ፖንቶስ ዘጋቢዎች አንድ cada lixeira no mapa
  3. traçar a rota entre os pontos

Para executar os passos acima, vamos ኤፒአይ የጉግል አቅጣጫዎችን ይጠቀማል። ለምሳሌ ፣ እንደ ሮታስ ፣ ለሴጉዶስ ኦስ ፓሶስ አጋዥ ስልጠናን በ Google ካርታ Android ኤፒአይ V2 ውስጥ የ Google አቅጣጫዎችን በመጠቀም በሁለት አካባቢዎች መካከል የመንዳት መንገድ አቅጣጫዎችን መሳል

ፕሪሚሮ ፣ ቫሞስ ቄሪያል አካዳዲዳስ ለፓዳ ኡም ፖንቶስ que desejamos ማርካር

// ቦታዎች

የግል LatLng የአሁኑ;

የግል LatLng lixeiraA; የግል LatLng lixeiraB; የግል LatLng lixeiraC; የግል LatLng lixeiraD;.

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

የግል ባዶ ቼክLocationandAddToMap () {// ተጠቃሚው ፈቃዱን (ActivityCompat.checkSelfPermission (ይህ ፣ android. Manifest.permission. ACCESS_FINE_LOCATION)) ከሆነ! = PackageManager. ACCESS_COARSE_LOCATION)! = PackageManager. PERMISSION_GRANTED) {// የአካባቢውን ፈቃድ መጠየቅ ActivityCompat.requestPermissions (ይህ ፣ አዲስ ሕብረቁምፊ {android. Manifest.permission. ACCESS_FINE_LOCATION} ፣ LOCATION_REQUEST_CODE) ፤ መመለስ; }

// ፉስን በመጠቀም የመጨረሻውን የታወቀ ቦታ ማምጣት

የአካባቢ ሥፍራ = LocationServices. FusedLocationApi.getLastLocation (googleApiClient);

// MarkerOptions አዲስ ጠቋሚ ለመፍጠር ጥቅም ላይ ይውላሉ። በ MarkerOptions አካባቢን ፣ ርዕስን ወዘተ መግለፅ ይችላሉ።

this.current = new LatLng (location.getLatitude (), location.getLongitude ()); MarkerOptions markerOptions = new MarkerOptions (). አቀማመጥ (የአሁኑ).title ("Posição atual");

// የተፈጠረውን ምልክት በካርታው ላይ በማከል ፣ ካሜራውን ወደ ቦታው በማንቀሳቀስ

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

// በ 15 ማጉላት ካሜራውን ወዲያውኑ ወደ ቦታው ያንቀሳቅሱት።

mMap.moveCamera (CameraUpdateFactory.newLatLngZoom (የአሁኑ ፣ 15));

// አጉላ ፣ ካሜራውን እያነቃቃ።

mMap.animateCamera (CameraUpdateFactory.zoomTo (14) ፣ 2000 ፣ ባዶ);

}

ኢም ሰጉይዳ ፣ ፓራ ካዳ ሊክሴራ ፣ ፎረም ክሪዶስ ሜቶዶስ ሲሚላሬስ አአ አባይxo ፦

የግል ባዶነት addBinALocation () {// ተጠቃሚው ፈቃዱን ከሰጠ (ActivityCompat.checkSelfPermission (ይህ ፣ android. Manifest.permission. ACCESS_FINE_LOCATION)! = PackageManager. PERMISSION_GRANTED && ActivityCompat.checkSelfPermission (ይህ ፣ android. ACCESS_COARSE_LOCATION)! = PackageManager. PERMISSION_GRANTED) {// የአካባቢውን ፈቃድ መጠየቅ ActivityCompat.requestPermissions (ይህ ፣ አዲስ ሕብረቁምፊ {android. Manifest.permission. ACCESS_FINE_LOCATION} ፣ LOCATION_REQUEST_CODE) ፤ መመለስ; }

// Praça da Estação

ድርብ ኬክሮስ = -19.9159578; ድርብ ኬንትሮስ = -43.9387856; this.lixeiraA = አዲስ LatLng (ኬክሮስ ፣ ኬንትሮስ);

MarkerOptions markerOptions = new MarkerOptions (). አቀማመጥ (lixeiraA).title ("Lixeira A");

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

እንደ ኬክሮስ (ኬክሮስ) እና ኬንትሮስ / ዴአድ / lixeira foram recuperadas através do próprio Google Maps, e deixadas fixas no código. ለነገሩ ፣ ፋሲሊየም ሳልቫስ ኢም ባንኮ ዴ ዳዶስ (ለምሳሌ Firebase)። Será a primeira evolução deste projeto!

ኦ último passo agora é traçar as rotas entre os pontos. ፓራ 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 አመጣጥ ፣ የ LatLng ጥፋት ፣ የመንገድ ነጥቦችን ዝርዝር) {

// የመንገድ አመጣጥ

ሕብረቁምፊ str_origin = "origin ="+origin.latitude+","+origin.longitude;

// የመንገድ መድረሻ

ሕብረቁምፊ str_dest = "መድረሻ ="+dest.latitude+","+dest.longitude;

// በመንገድ ላይ የመንገድ ነጥቦች

// የመንገድ ነጥቦች = አሻሽል -እውነት -እውነት -19.9227365 ፣ -43.9473546 | -19.9168006 ፣ -43.9361124 ሕብረቁምፊ የመንገድ ነጥቦች = "የመንገድ ነጥቦች = ማመቻቸት ፦ እውነት" ፤ ለ (LatLng point: waypointsList) {waypoints += "|" + point.latitude + "," + point.longitude; }

// ዳሳሽ ነቅቷል

ሕብረቁምፊ ዳሳሽ = "ዳሳሽ = ሐሰት";

// ለድር አገልግሎት ግቤቶችን መገንባት

የገመድ መለኪያዎች = str_origin+"&"+str_dest+"&"+sensor+"&"+waypoints;

// የውጤት ቅርጸት

ሕብረቁምፊ ውፅዓት = "json";

// ለድር አገልግሎት ዩአርኤልን መገንባት

ሕብረቁምፊ url = "https://maps.googleapis.com/maps/api/directions/"+output+"?"+parameters; System.out.println ("+++++++++++++++"+url);

ዩአርኤል መመለስ;

}

ኢ ፣ ፖርፊም ፣ ጁንታንዶ ቱዶ ኖ ሜቶዶ ርዕሰ መምህር ዳ ክላሴ ፣ onMapReady

@MapReady (GoogleMap googleMap) ላይ የህዝብ ባዶነት {mMap = googleMap;

checkLocationandAddToMap ();

ከሆነ (lixeirasList.get (0).getVolumeLixo ()> Lixeira. MIN_VOLUME_GARBAGE

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

// መስመሮችን ይሳሉ

// ዩአርኤልን ወደ ጉግል አቅጣጫዎች ኤፒአይ ማግኘት

ነጥቦችን ይዘርዝሩ = አዲስ ArrayList (); ነጥቦች.add (lixeiraB); ነጥቦች.add (lixeiraC); ነጥቦች.add (lixeiraD);

ሕብረቁምፊ url = getDirectionsUrl (የአሁኑ ፣ lixeiraA ፣ ነጥቦች);

DownloadTask downloadTask = new DownloadTask (); // የጄሰን መረጃን ከ Google አቅጣጫዎች ኤፒአይ ማውረድ ይጀምሩ ።Task.execute (url); }

አ Aqu ፓሳሞስ አፔናስ ፔሎስ tosንቶስ ርእሰ መምህራን። O código completo do projeto será disponibilizado para consulta.

ደረጃ 8: Conclusão

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. እንደዚሁም ፣ እንደዚሁም በቪዲዮው ውስጥ የተካተቱትን ነገሮች ሁሉ አያካትትም።

የሚመከር: