Мазмұны:

SmartBin: 8 қадам
SmartBin: 8 қадам

Бейне: SmartBin: 8 қадам

Бейне: SmartBin: 8 қадам
Бейне: Xiaomi Smart Band 7 Pro — всё плохо? 2024, Қараша
Anonim
SmartBin
SmartBin

Ақпараттық жүйенің маңыздылығы жоқ, бұл сіздің тіліңізден бас тартпайды, сонымен қатар сіздің жеке ақпаратыңыздың маңыздылығын көрсетеді.

Пара монтар жобасы, және қажет:

  • NodeMCU
  • Ultrassônico de Distancia сенсоры
  • Caixa de papelão
  • Protoboard
  • Кабо
  • Android дисплейі

1 -қадам: Conectando O сенсоры

Бастапқыда, NODEMCU ультрадыбыстық датчигі мен сенсоры бар. Para toto, vamos conectar портативті триггер ретінде D4 e D3 Dode e NodeMCU жаңғырығы:

// түйреуіш сандарын анықтайды #pino_trigger 2 анықтаңыз // D4

#pino_echo 0 анықтаңыз // D3

Сенсорлар мен оқулықтар FilipeFlop оқулықтары мен сенсорлармен жұмыс істейді.

float cmMsec, inMsec;

ұзын микросек = ультрадыбыстық. timing ();

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 -қадам: Монтандо мен Ликсейра

Agora, vamos montar және lixeira inteligente. Precisaremos conectar немесе сенсор ультрадыбыстық емес, «тето» да. Мысалы, оқшауланған жағдайда. Түсініктеме бойынша, бұл жағдайда, әрине, үлкен мәнге ие болады. 26, 3см қашықтықта ешқандай айырмашылық жоқ. Ең бастысы, бұл маңызды мәселе.

Мысалы, сенсорлар ультрадыбыстық, сенсорлық диагностиканың әр түрлі кезеңдерінде кездейсоқ пайдаланылатын сенсорлар болып табылады.

// Симуландо 4 лексейра

ұзын lixeiraID;

void loop () {

lixeiraID = кездейсоқ (1, 5);

}

3 -қадам: Nuvem жүктеу

Агро, жаңашылдықтың ең маңызды ерекшелігі. ThingSpeak бағдарламасымен таныс болыңыз, бұл сіздің танысыңыз. Бастапқыда жаңа арналар, 4 параметролар, сілтемелер немесе көлемді сілтемелер бар.

ThingSpeak қосымшасының көмегімен сіз API -ді немесе басқа каналдарды таба аласыз. Ресми сайт жоқ.

ThingSpeak, ESP8266WiFi.h және eBitlioteca кітапханасы, ThingSpeak және басқа да қосымшалар арқылы қол жетімді.

Бастапқыда, сіз барлық функцияларды орындауға міндеттісіз (анықтаманың соңғы нұсқасы, рұқсат өтуі , сәйкестендіру және ұсыну).

жарамсыз connectWifi () {

Serial.print («Қосылу»+ *ssid);

WiFi.begin (ssid, pass);

while (WiFi.status ()! = WL_CONNECTED) {

кешіктіру (500);

Serial.print («.»);

}

Serial.println («»);

Serial.print («Conectado na rede»);

Serial.println (ssid);

Serial.print («IP:»);

Serial.println (WiFi.localIP ());

}

Орнату, орнату және жою қажет.

жарамсыз орнату () {

Serial.begin (9600);

Serial.println («Lendo dados do sensor …»);

// Wi-Fi немесе Conectando

connectWifi ();

}

ThingSpeak үшін ең маңызды ақпарат, бұл HTTP -ді жаңарту үшін қажет, сонымен қатар API -нің параметірлері.

жарамсыз sendDataTS (float cmMsec, ұзақ идентификатор) {

if (client.connect (сервер, 80)) {

Serial.println («ThingSpeak парақтары»);

ЖолStrStr = apiKey;

postStr += «& өріс»;

postStr += id;

postStr += «=»;

postStr += Жол (cmMsec);

postStr += «\ r / n / r / n»;

Serial.println (postStr);

client.print («POST /HTTP жаңарту /1.1 / n»);

client.print («Хост: api.thingspeak.com / n»);

client.print («Қосылым: жабу / n»);

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

client.print («Content-Type: application/x-www-form-urlencoded / n»);

client.print («Content-Length:»);

client.print (postStr.length ());

client.print («\ n / n»);

client.print (postStr);

кешіктіру (1000);

}

client.stop ();

}

Параметро - бұл сенсорлық сигналдың ультрадыбыстық сенсоры. Бұл жеке куәлікке сәйкес келуі керек (кездейсоқ емес, 1 -ден 4 -ке дейін).

Ол идентификаторды анықтауға мүмкіндік береді және жүктеуді жүктейді.

4 -қадам: Recuperando Dados Doing ThingSpeak

O ThingSpeak рұқсат етіледі, бұл JSON желісінде, сонымен қатар қызмет көрсетуде. Арнаулы нұсқауларға сәйкес, арнаның сипаттамасы:

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

Бұл ең жақсы нұсқа болып табылады. Cenário é URL мекен -жайы бойынша:

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

Түсіндірме сілтеме жоқ. Бұл маңызды жобалар үшін:

  • CHANNEL_ID: арнаны жаңарту
  • FIELD_NUMBER
  • API_KEY: API арнасы

URL мекенжайын Android және ThingSpeak арқылы орнатуға болады.

5 -қадам: Криандо және Android қосымшасы

Android Studio жоқ, Android -ті жаңартыңыз. AndroidManifest -те рұқсат етілгендей конфигурациялау қажет.

Google карталары мен Google -ді пайдалану қажет. API сілтемесі жоқ.

Бұл жағдайда сіз конфигурациялауды шеше аласыз.

Google Maps негізіндегі API үшін API кілті жолдық ресурс ретінде анықталады.

(«Res/values/google_maps_api.xml» файлын қараңыз).

API кілті APK қол қою үшін қолданылатын шифрлау кілтімен байланыстырылғанын ескеріңіз. Әр шифрлау кілті үшін басқа API кілті қажет, оның ішінде жариялауға APK қол қою үшін босату кілті. Src/debug/және src/release/ішіндегі отладтау және шығару мақсаттарының кілттерін анықтауға болады.

<мета-деректер

android: name = «com.google.android.geo. API_KEY»

android: value = «@string /google_maps_key» />

AndroidManifest -тің соңғы немесе соңғы нұсқаларының конфигурациясы.

n

6 -қадам: Recuperando O Feed жоқ Android

Негізгі бөлімде Android жоқ, MainActivity, ThingSpeak бағдарламасының жеке анықтамасы бойынша 4 нұсқаға ие:

жеке String url_a = «https://api.thingspeak.com/channels/429823/fields/1/last.json?api_key="+API_THINGSPEAK_KEY+"&status=true»; жеке String url_b = «https://api.thingspeak.com/channels/429823/fields/2/last.json?api_key="+API_THINGSPEAK_KEY+"&status=true»; жеке String url_c = «https://api.thingspeak.com/channels/429823/fields/3/last.json?api_key="+API_THINGSPEAK_KEY+"&status=true»; жеке String url_d = «https://api.thingspeak.com/channels/429823/fields/4/last.json?api_key="+API_THINGSPEAK_KEY+"&status=true»;

Android және Android JSONObject бағдарламалары үшін ең маңызды нұсқаулар мен бағдарламалар бар. Бұл URL мекен -жайы бойынша:

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

Ұялы байланыстарға сілтеме жасайтын болсаңыз, HttpJsonParser -ді қолданыңыз. Жауаптар URL мекен -жайы бойынша, жауаптар JSON монтаждауының соңғы нұсқасы, сонымен қатар URL мекен -жайлары болып табылады.

жалпыға ортақ JSONObject makeHttpRequest (String url, String әдісі, Карта параметрлері) {

тырысу {

Uri. Builder құрастырушысы = жаңа Uri. Builder (); URL urlObj; EncodedParams жолы = «»; if (params! = null) {for (Map. Entry жазбасы: params.entrySet ()) {builder.appendQueryParameter (entry.getKey (), entry.getValue ()); }} if (builder.build (). getEncodedQuery ()! = null) {encodedParams = builder.build (). getEncodedQuery ();

}

if («GET». equals (method)) {url = url + «?» + кодталғанParams; urlObj = жаңа URL (url); urlConnection = (HttpURLConnection) urlObj.openConnection (); urlConnection.setRequestMethod (әдіс);

} басқа {

urlObj = жаңа URL (url); urlConnection = (HttpURLConnection) urlObj.openConnection (); urlConnection.setRequestMethod (әдіс); urlConnection.setRequestProperty («Content-Type», «application/x-www-form-urlencoded»); urlConnection.setRequestProperty («Content-Length», String.valueOf (encodedParams.getBytes (). length)); urlConnection.getOutputStream (). write (encodedParams.getBytes ()); } // urlConnection.connect () серверіне қосылыңыз; // Жауапты оқыңыз = urlConnection.getInputStream (); BufferedReader оқу құралы = жаңа BufferedReader (жаңа InputStreamReader (is)); StringBuilder sb = жаңа StringBuilder (); Жол сызығы;

// Жауапты талдаңыз

while ((line = reader.readLine ())! = null) {sb.append (жол + «\ n»); } is.close (); json = sb.toString (); // Жауапты JSON нысанына түрлендіру jObj = new JSONObject (json);

} catch (ҚолдамайтынEncodingException e) {

e.printStackTrace (); } catch (ProtocolException e) {e.printStackTrace (); } catch (IOException e) {e.printStackTrace (); } catch (JSONException e) {Log.e («JSON Parser», «Деректерді талдауда қате» + e.toString ()); } catch (Ерекше д) {Log.e («Ерекшелік», «Деректерді талдау қатесі» + e.toString ()); }

// JSON нысанын қайтару

jObj қайтару;

}

}

Директорлар кеңесінің бастығы, сіздің веб -сайттарыңызда байланыс орнатылған, сонымен қатар doInBackground -дағы мамандықтар бар.

@Override қорғалған String doInBackground (String… params) {HttpJsonParser jsonParser = жаңа HttpJsonParser ();

responseLixeiraA = jsonParser.makeHttpRequest (url_a, «GET», нөл);

answerLixeiraB = jsonParser.makeHttpRequest (url_b, «GET», нөл); responseLixeiraC = jsonParser.makeHttpRequest (url_c, «GET», нөл); responseLixeiraD = jsonParser.makeHttpRequest (url_d, «GET», нөл);

қайтару нөлі;}

DoInBackgroundé -ге кіру, Android -тің орындалуын бақылау арқылы OnPostExecute бағдарламасын іске қосыңыз. Neste método, vixos criar os objetos Lixeira, ThingSpeak -тің танымал коммерциялық бағдарламалары:

onPostExecute (String нәтижесі) қорғалған void {pDialog.dismiss (); runOnUiThread (new Runnable () {public void run () {

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

MainView қарау (View) findViewById (R.id.activity_main); if (сәттілік == 1) {try {// Cria feedDetail para cada lixeira Lixeira feedDetails1 = жаңа Lixeira (); Lixeira feedDetails2 = жаңа Lixeira (); Lixeira feedDetails3 = жаңа Lixeira (); Lixeira feedDetails4 = жаңа Lixeira ();

feedDetails1.setId ('A');

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

feedDetails2.setId ('B');

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

feedDetails3.setId ('C');

feedDetails3.setPesoLixo (Double.parseDouble (answerLixeiraC.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 (answerLixeiraD.getString (KEY_FIELD4)))));

feedList.add (feedDetails1);

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

// Dados das lixeiras есебі

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 = жаңа SimpleDateFormat («кк/а/жжж»); CurrentDate жолы = simpleDate.format (currentTime); createDate.setText (KEY_DATE + currentDate + «»); listaDeLixeiras.setAdapter (адаптер);

} catch (JSONException e) {

e.printStackTrace (); }

} басқа {

Toast.makeText (MainActivity.this, «Деректерді жүктеу кезінде қате пайда болды», Toast. LENGTH_LONG).show ();

}

} }); }

Ағылшын тілінің ресми нұсқалары, сонымен қатар сіздің жеке тізімдеріңіз де бар.

7 -қадам: Mostrando No Mapa

Mostrando No Mapa
Mostrando No Mapa

Директорлар кеңесінің басты хатшысы, егер сіз картаның ресми картасы болып табылмайтын болсаңыз.

/ ** Пайдаланушы Mapa түймесін түрткенде шақырылады*/ public void openMaps (View view) {Intent aim = new Intent (this, LixeiraMapsActivity.class);

// Лексейр тізімі

Bundle bundle = жаңа топтама (); bundle.putParcelableArrayList («lixeiras», feedList); aim.putExtras (жинақ);

startActivity (ниет);

}

Ешқандай картаны орындауға болмайды:

  1. caminha de lixo жасаңыз
  2. marcar os pontos корреспонденттері картаның картасы жоқ
  3. tracar a rota entre os pontos

Бұл Google Directions API -ді қолдану арқылы орындалады. Google картасы Android API V2 -де Google бағыттарын қолдана отырып, екі жердің арасында жүру маршрутының сызбасын сызу.

Primeiro, vamos criar localidades үшін ақшалай карталар:

// Орындар

жеке LatLng ағымы;

жеке LatLng lixeiraA; жеке LatLng lixeiraB; жеке LatLng lixeiraC; жеке LatLng lixeiraD;.

Қарта -қартаға сәйкес келмеуі керек:

private void checkLocationandAddToMap () {// Пайдаланушының рұқсат бергенін тексеру, егер: ACCESS_COARSE_LOCATION)! = PackageManager. PERMISSION_GRANTED) {// Орналасуға рұқсат сұрау ActivityCompat.requestPermissions (бұл жаңа жол {android. Manifest.permission. ACCESS_FINE_LOCATION}, LOCATION_REQUEST_CODE); қайтару; }

// Fus көмегімен соңғы белгілі орынды алу

Орналасқан жері = LocationServices. FusedLocationApi.getLastLocation (googleApiClient);

// MarkerOptions жаңа Маркер жасау үшін пайдаланылады. MarkerOptions көмегімен орынды, тақырыпты және т.б. көрсетуге болады.

this.current = жаңа LatLng (location.getLatitude (), location.getLongitude ()); MarkerOptions markerOptions = жаңа MarkerOptions (). Орны (ағымдағы). Атауы («Posicaã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);

}

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

private void addBinALocation () {// Пайдаланушының рұқсат бергенін тексеру: ACCESS_COARSE_LOCATION)! = PackageManager. PERMISSION_GRANTED) {// Орналасуға рұқсат сұрау ActivityCompat.requestPermissions (бұл жаңа жол {android. Manifest.permission. ACCESS_FINE_LOCATION}, LOCATION_REQUEST_CODE); қайтару; }

// Прика да Эстачау

қос ендік = -19.9159578; қос бойлық = -43.9387856; this.lixeiraA = жаңа LatLng (ендік, бойлық);

MarkerOptions markerOptions = new MarkerOptions (). Position (lixeiraA).title («Lixeira A»);

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

Ендік пен бойлықта Google карталары қолданылған кезде Google Maps -тің қолданылуы мүмкін болғандықтан, олар ешнәрсеге сәйкес келмейді. Ең дұрысы, Firebase -тің ең жақсы құндылықтары. Ең бастысы - жобалау!

Потос -приводты айналдыру керек. Қарап шығыңыз, бұл маңызды емес, сонымен қатар жол нүктелері!

Пікірлерді есте сақтаңыз:

жеке String getDirectionsUrl (LatLng шығу тегі, LatLng dest, Жол нүктелерінің тізімі тізімі) {

// Маршруттың шығу тегі

Жол str_origin = «Origin =»+Origin. Latitude+«,»+Origin.longitude;

// Маршруттың тағайындалуы

Жол str_dest = «destination =»+dest.latitude+«,»+dest.longitude;

// Маршрут бойындағы нүктелер

//waypoints=optimize:true|-19.9227365, -43.9473546 | -19.9168006, -43.9361124 Жолдық нүкте жолдары = «жол нүктелері = оңтайландыру: ақиқат»; for (LatLng нүктесі: waypointsList) {жол нүктелері += «|» + нүкте.аттық + «,» + нүкте. бойлық; }

// Сенсор қосылды

Жол сенсоры = «sensor = false»;

// Веб -қызметтің параметрлерін құру

Жол параметрлері = str_origin+«&»+str_dest+«&»+сенсор+«&»+жол нүктелері;

// Шығару форматы

Жолдың шығысы = «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 da classe, onMapReady:

@Override public void onMapReady (GoogleMap googleMap) {mMap = googleMap;

checkLocationandAddToMap ();

if (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 (); }

// Маршруттарды сызыңыз

// Google Directions API -ге URL алу

Тізім нүктелері = жаңа ArrayList (); балл.қосымша (lixeiraB); балл.қосымша (lixeiraC); балл.қосылу (lixeiraD);

Жол url = getDirectionsUrl (ағымдағы, lixeiraA, нүктелер);

DownloadTask downloadTask = жаңа DownloadTask (); // Google Directions API downloadTask.execute (url) -дан json деректерін жүктеуді бастаңыз; }

Aqua passamos apenas pelos pontos principais. Консультациялардың толық жоспарын орындаңыз.

8 -қадам: Қорытынды

Бұл IoT -ді жаңартуға мүмкіндік береді, сонымен қатар жаңа технологиялар, сонымен қатар, интерактивті байланыстардың шешімі болып табылады. Қосымшада Android -тің барлық нұсқалары бар, олар әр түрлі болуы мүмкін.

Ұсынылған: