산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Manufacturing Technology >> 제조공정

스마트 주차 시스템

구성품 및 소모품

라즈베리 파이 3 모델 B
× 1
Arduino Mega 2560
× 1
초음파 센서 - HC-SR04(일반)
× 3

앱 및 온라인 서비스

Samsung ARTIK Cloud for IoT
Google 지도
Arduino IDE

이 프로젝트 정보

방갈로르와 같이 혼잡한 도시에서 무료 주차장을 찾는 것은 매우 어렵습니다. 여기에서 누구든지 자가용을 가지고 집에서 외출을 하고 싶다면 가장 먼저 떠오르는 것은 자신의 차를 어디에 주차할 것인가 하는 것입니다. 대부분의 경우 사람들은 주차장에 가다가 모든 주차 공간이 만차인 것을 보고 다른 주차장을 찾아야 합니다. 그래서 큰 번거로움이 있고 많은 사람들이 그가 차를 가지고 나올 때 그의 차를 주차하는 것을 두려워합니다.

그래서 어떻게 하면 문제를 해결할 수 있을까 고민하다가 드디어 클라우드 기반의 스마트 주차 시스템을 만드는 데 성공했고 이 시스템을 구현하면 우리 도시의 주차 문제가 해결될 수 있기를 바랍니다. ARTIK Cloud는 이러한 작업에 정말 훌륭하고 적절한 플랫폼입니다.

이 시스템을 사용하면 사용자는 모바일 또는 웹 앱을 사용하여 어디서나 쉽게 사용 가능한 주차장을 찾을 수 있습니다. 시스템은 30초마다 주차 데이터를 업데이트합니다.

이 프로젝트에서는 이러한 스마트 시스템을 쉽게 구축할 수 있는 방법을 보여 드리겠습니다. 물론 저는 가장 멋진 IoT 클라우드 플랫폼인 ARTIK Cloud 플랫폼을 사용할 것입니다. 세부 사항으로 이동하기 전에 내 데모 프로젝트의 데모 비디오를 감상하십시오.

이 데모 시스템의 경우 Samsung Artik Cloud 플랫폼에서 하나의 새 장치만 생성하면 됩니다. 나는 그것을 여기에서 보여줄 것이다. 내 기기의 이름을 레인보우 파킹으로 지정하고, 주차장에 무료 슬롯과 같은 주차 데이터를 저장합니다. Raspi는 미리 설정된 규칙에 따라 주차 정보를 보냅니다.

이 프로젝트에 관련된 단계:

1. Artik Cloud Platform에서 하나의 장치 만들기

2. Artik Cloud에서 하나의 애플리케이션 만들기

3. Artik Cloud에서 하나의 규칙 만들기

4. Arduino 준비

5. 센서 연결

6. 라즈베리 파이 준비

7. 웹 애플리케이션 개발

그럼, 하나씩 시작하겠습니다. 가장 먼저. Artik 클라우드 플랫폼에서 새 장치를 만드는 것부터 시작하겠습니다.

1단계:Artik Cloud Platform에서 새 장치 만들기

A) Samsung 계정에 로그인하고 오른쪽 상단에서 DEVELOPER 옵션을 클릭합니다.

나) DASHBOARD에서 DEVICE TYPES를 선택하고 NEW를 클릭하십시오.

다) DEVICE DISPLAY NAME에 장치 이름을 입력하고 UNIQUE NAME을 지정한 다음 CREATE DEVICE TYPE을 클릭합니다.

D) + 새 매니페스트

를 클릭합니다.

마) 여기에 업로드하고 저장할 센서 데이터의 FIELD NAME을 입력하고 DATA TYPE을 정수로 언급하십시오. 그런 다음 저장을 클릭하세요.

F) 그런 다음 NEXT:DEVICE ACTIONS

를 클릭합니다.

G) 조치를 취하거나 표준 조치에서 선택하십시오. 저장하려면 클릭하세요. 우리 프로젝트의 경우 조치가 필요하지 않습니다. 그런 다음 NEXT:ACTIVE MANIFEST를 클릭하십시오.

아) Device Fields를 살펴보고 NEXT:ACTIVE MANIFEST를 다시 클릭하십시오.

나) 축하합니다! 첫 번째 장치를 성공적으로 만들었습니다. 이제 장치를 Artik 클라우드에 연결해야 합니다. 자, 해봅시다.

제) 오른쪽 상단에서 MY ARTIK CLOUD로 이동합니다.

카) MY ARTIK CLOUD를 클릭하고 장치를 선택합니다.

라) +다른 기기를 추가하려면 클릭하세요.

엠) 방금 만든 장치의 이름을 입력하고 클릭합니다.

N) CONNECT DEVICE... 버튼을 클릭합니다.

오) 기기가 CLOUD에 연결되었습니다.

P) 그것을 클릭하십시오. 토큰을 생성하고 DEVICE ID와 DEVICE TOKEN을 기록해 둡니다. 실제 기기, 웹 앱 또는 Android 앱에서 기기에 연결할 때마다 나중에 필요합니다.

2단계:Artik Cloud에서 규칙 만들기

이 단계에서는 Artik 클라우드가 조건이 충족될 때 작업을 생성하고 작업을 구독하는 장치와 응용 프로그램이 즉시 메시지를 수신할 때 Artik 클라우드가 작업을 생성할 몇 가지 조건을 설정하는 규칙을 만들 것입니다.

A) MY ARTIK CLOUD 메뉴에서 규칙을 선택하고 새 규칙을 클릭합니다.

나) IF 선택 상자에서 장치의 데이터 필드를 선택하고 값과 조건을 설정합니다. 그런 다음 THEN 필드에서 특정 장치에 대한 작업을 선택합니다. 상수 매개변수 값을 설정하거나 다른 장치 데이터에서 값을 선택할 수 있습니다. 다른 장치에서 데이터 필드를 정의하려면 빨간색 상자에 표시된 다운로드 아이콘을 클릭하십시오.

다) 드롭다운에서 장치를 선택한 다음 데이터 필드를 선택합니다.

D) 그런 다음 규칙 저장을 클릭하십시오.

3단계. Arduino 준비

내 프로젝트에서 Arduino의 주요 작업은 주차 스테이션에 연결된 센서에서 데이터를 수집하고 직렬 포트를 사용하여 데이터를 Raspberry Pi로 보내는 것입니다. 여기에서 Arduino Mega를 사용하여 하나의 주차 스테이션에 구현했습니다. 우리는 다른 주차 스테이션에 더 많은 Arduino 보드를 연결할 수 있습니다. 여기에서는 초음파 센서를 사용하여 어느 위치에서나 사용할 수 있습니다.

초음파 센서에는 Arduino 디지털 핀이 사용되었습니다. 아두이노 스케치 초음파 센서가 부착되어 있습니다. Arduino 보드에 적절한 스케치를 업로드하십시오.

초음파 센서에 대한 자세한 내용은 여기에서 확인할 수 있습니다.

4단계:센서 연결

모든 센서를 Arduino에 연결하려면 회로도 섹션을 참조하십시오.

5단계:Raspberry Pi 준비

나는 당신이 이전에 Raspberry pi로 작업한 경험이 있다고 가정합니다. 인터넷에서 많은 초보자 자습서를 사용할 수 있습니다.

라즈베리 파이로 작업을 시작하겠습니다. Raspberry pi는 WebSocket 클라이언트로 작동하며 WebSocket 프로토콜을 사용하여 Artik 클라우드와 통신합니다. 프로그래밍에 Node.js를 사용했습니다. Python Node와 달리 Raspberry Pi에는 사전 설치되어 있지 않습니다.

A). 터미널에서 다음 명령을 사용하여 Raspberry pi에 Node 및 npm을 설치합니다.

sudo apt-get 업데이트sudo apt-get install nodejs npm 

나). WebSocket 클라이언트 ws를 raspberry pi에 설치

npm install --save ws 

다). 라즈베리 파이에 직렬 포트 설치

npm 설치 직렬 포트 

세 단계를 모두 성공적으로 완료했다면 파이가 직렬 포트를 사용하여 Arduino와 통신하고 웹 소켓을 사용하여 Artik 클라우드와 통신할 준비가 된 것입니다. 앞서 말했듯이 2개의 주차 스테이션에는 2개의 라즈베리 파이가 필요합니다. 따라서 Github에서 이에 대한 소스 코드를 다운로드합니다. FileZilla와 같은 ftp 클라이언트를 사용하여 라즈베리 파이에 코드를 업로드할 수 있습니다. 소스 코드에서 DEVICE ID 및 DEVICE TOKEN을 변경하는 것을 잊지 마십시오.

D) raspberry pi에 코드를 업로드한 후 터미널 창에 다음 명령을 입력하여 코드를 실행합니다.

sudo 노드 staff-parking.js 

6단계. 웹 애플리케이션 개발

웹 애플리케이션 개발에는 HTML과 JavaScript가 사용되었습니다. 여기서 Artik 클라우드와 통신하기 위해 다시 WebSocket 프로토콜을 사용했습니다. 내 애플리케이션에 지도를 통합하기 위해 Google Map API를 사용했습니다.

내 Github에서 web-app 폴더를 다운로드하고 자신의 디바이스 ID와 토큰으로 DEVICE ID와 DEVICE TOKEN을 수정합니다. 수신된 새 데이터에 대한 작업을 생성하는 장치의 ID를 사용하십시오(제 경우에는 edison). 웹 브라우저를 사용하여 websocket.html을 열고 즐기십시오. 데모 동영상 보기...

<섹션 클래스="섹션 컨테이너 섹션 축소 가능" id="코드">

코드

<울>
  • 라즈베리 파이(직원 주차)
  • Arduino(음파 탐지기)
  • 웹 앱(HTML)
  • 웹 앱(클라이언트 측)
  • 라즈베리 파이(직원 주차)자바스크립트
    Raspberry Pi의 소스 코드
    //직원 주차 데이터 transfervar webSocketUrl ="wss://api.artik.cloud/v1.1/websocket?ack=true";var device_id ="Your Device id"; // 직원 주차 DEVICE IDvar device_token ="귀하의 장치 토큰"; //staff Parking DEVICE TOKEN// 연결하려면 websocket 모듈이 필요합니다. // 파이의 터미널에 다음 두 명령을 실행합니다.// sudo apt-get update// npm install websocketvar WebSocket =require('ws');var isWebSocketReady =false;var data="";var ws =null;// 라즈베리 파이에 직렬 포트 모듈 필요 // 터미널에 다음 명령 실행// npm install serialportvar serialport =require("serialport");var SerialPort =serialport.SerialPort;var sp =new SerialPort("/dev/ttyACM0", { //arduino baudrate:9600과 직렬 통신, // 우리는 UNO를 사용하므로 baudrate는 9600이므로 모델 파서에 따라 변경해야 할 수도 있습니다. serialport.parsers.readline(" \n")});var Parking_state=0;// 주차 확인을 위한 변수 state_gate/** * 현재 시간을 밀리초 단위로 가져옵니다. */function getTimeMillis(){ return parseInt(Date.now().toString());}/** * /websocket 연결 생성 및 GPIO 핀 설정 */function start() { //WebSocket 연결 생성 isWebSocketReady =false; ws =새로운 웹소켓(webSocketUrl); // 성공적으로 연결되면 이 함수가 호출됩니다. ws.on('open', function() { console.log("WebSocket connection is open ...."); // 성공적인 데이터 전송을 위해서는 등록해야 합니다. // 등록은 다음을 위한 것입니다. 인증 또는 보안 데이터 전송 레지스터(), }); ws.on('message', function(data) { //이 루프는 클라이언트가 일부 메시지를 보낼 때마다 호출됩니다. ws.on('close', function() { console.log("WebSocket 연결이 닫혔습니다...."); }); }/** * /websocket 끝점에 등록 메시지를 보냅니다. *///클라이언트는 장치가 here에서 등록될 때만 작동합니다. register(){ console.log("Registering device on the WebSocket connection"); try{ var registerMessage ='{"유형":"register", "sdid":"'+device_id+'", "Authorization":"bearer '+device_token+'", "cid":"'+getTimeMillis()+' "}'; console.log('등록 메시지 보내기 ' + registerMessage + '\n'); ws.send(registerMessage, {마스크:true}); isWebSocketReady =참; } catch (e) { console.error('메시지 등록 실패. 메시지 등록 오류:' + e.toString()); } }//수신 후 데이터는 처리를 위해 여기로 전송됩니다. // 우리의 경우 이 함수는 사용되지 않습니다. // 라즈베리 파이에서는 어떤 작업도 수신하지 않기 때문입니다. 이것은 향후 수정을 위한 것입니다.function handleRcvMsg(msg){ // 수신된 문자열을 구문 분석해야 합니다. var msgObj =JSON.parse(msg); if (msgObj.type !="action") 반환; // 조기 귀환; var 작업 =msgObj.data.actions; var actionName =액션[0].이름; console.log("수신된 액션은 " + actionName); // accordinlgy를 수행하려면 등록된 작업을 알아야 합니다. } else { //등록되지 않은 작업이 수신되면 이 루프가 실행됩니다. //따라서 클라우드에 모든 작업을 등록해야 합니다. console.log('인식할 수 없는 작업을 수신한 후 아무 것도 하지 않음 ' + actionName); 반품; } }/** * ARTIK Cloud에 하나의 메시지 보내기 *///이 함수는 클라우드에 명령을 보내는 역할을 합니다.//function sendStateToArtikCloud(parking)는 artik에 무료 주차 공간 수를 보냅니다. ', "ts":'+getTimeMillis(); var data ={ "parking_slot":Parking_slot //인수에서 클라우드 변수 "parking_value"로 주차 값 설정 }; var 페이로드 ='{"sdid":"'+device_id+'"'+ts+', "data":'+JSON.stringify(data)+', "cid":"'+getTimeMillis()+'"}'; console.log('페이로드 보내기 ' + 페이로드 + '\n'); ws.send(페이로드, {마스크:true}); } catch (e) { console.error('메시지 전송 오류:' + e.toString() +'\n'); } }function exitClosePins() { console.log('종료하고 모든 핀을 파괴하십시오!'); 프로세스.exit(); }start();//arduino에서 데이터를 수신할 때마다 실행(arduino에서 프로그래밍된 지연 30초)sp.on("open", function () { sp.on('data', function(data) { console .log("시리얼 포트 수신 데이터:" + data); //sendStateToArtikCloud(data);//무료 주차 슬롯 var Parking_slot =parseInt(data); sendStateToArtikCloud(parking_slot); });});process.on(' SIGINT', exitClosePins);
    Arduino(음파 탐지기)C/C++
    Arduino
    #define echoPin1 2 // 소나 1용 에코 핀#define trigPin1 3 // 소나 1용 트리거 핀#define echoPin2 4 // 소나 2용 에코 핀 #define trigPin2 5 // 소나 2용 트리거 핀#define echoPin3 6 // 소나 3용 에코 핀#define trigPin3 7 // 소나 3용 트리거 핀//#define echoPin4 9 // 소나 4용 에코 핀//#define trigPin4 8 // 트리거 핀 소나의 경우 4long duration1, distance1; // 거리 계산에 사용되는 기간long duration2, distance2;long duration3, distance3;//long duration4, distance4; int count=0;int freeSlot =0;void setup() { Serial.begin(9600); // raspberry pi에 대한 직렬 통신 시작 pinMode(trigPin1, OUTPUT); // 출력으로 핀을 트리거합니다. pinMode(echoPin1, INPUT); // 에코 핀을 입력으로 사용 pinMode(trigPin2, OUTPUT); 핀모드(echoPin2, INPUT); 핀모드(trigPin3, 출력); 핀모드(echoPin3, INPUT); //핀모드(trigPin4, OUTPUT); //핀모드(echoPin4, INPUT); }void loop() {/* 다음 trigPin/echoPin 주기는 음파를 반사하여 가장 가까운 물체의 거리를 결정하는 데 사용됩니다. */ /* 핀을 트리거하려면 최소 10마이크로초의 하이 레벨 신호가 필요합니다. * _____ * | | * --------------! !--------- * .....|10us |........ * 모듈은 8개의 40KHz 펄스 신호를 생성하고 에코 수신을 기다립니다. */ digitalWrite(trigPin1, LOW); 지연 마이크로초(2); digitalWrite(trigPin1, HIGH); 지연마이크로초(10); digitalWrite(trigPin1, LOW); // pulseIn() 함수는 시간에 따른 펄스 폭을 결정합니다. // 펄스의 지속 시간은 장애물의 거리에 비례합니다 duration1 =pulseIn(echoPin1, HIGH); digitalWrite(trigPin2, LOW); 지연 마이크로초(2); 디지털 쓰기(trigPin2, 높음); 지연마이크로초(10); digitalWrite(trigPin2, LOW); 지속시간2 =펄스인(echoPin2, HIGH); digitalWrite(trigPin3, LOW); 지연 마이크로초(2); 디지털 쓰기(trigPin3, 높음); 지연마이크로초(10); digitalWrite(trigPin3, LOW); 지속시간3 =펄스인(echoPin3, HIGH); //digitalWrite(trigPin4, LOW); //delayMicroseconds(2); //digitalWrite(trigPin4, HIGH); //delayMicroseconds(10); //digitalWrite(trigPin4, LOW); // 지속시간4 =펄스인(echoPin4, HIGH); // 거리 =(고수준 음속(340M/S) / 2, // 센티미터 =​​uS/58 distance1 =duration1/58.2; if(distance1<10) distance1 =1; else distance1 =0; distance2 =duration2 /58.2; if(distance2<10) distance2 =1; else distance2 =0; distance3 =duration3/58.2; if(distance3<10) distance3 =1; else distance3 =0; //distance4 =duration4/58.2; //if (distance4<10) //distance4 =1; //else distance4 =0; // 모든 센서의 결과를 더하여 총 차량 수 =distance1 + distance2 + distance3;; // 여유 슬롯 =총 슬롯 - 총 차량 freeSlot =3 - count; // 총 슬롯 수는 usb를 사용하여 라즈베리 파이로 전송 Serial.println(freeSlot); // 상태는 30초마다 업데이트됩니다.delay(5000); //freeSlot =0; //distance1 =0; //거리2 =0;//거리3 =0;//거리4 =0;}
    웹 앱(HTML)HTML
    프런트 엔드 웹 애플리케이션의 소스 코드
       ARTIK 클라우드 기반 스마트 주차 시스템  <스타일> rainbowParking { 디스플레이:블록; 배경색:#dddddd; 패딩:30px; 글꼴 크기:70px; 라인 높이:60%; 여백-왼쪽:40px; 여백 오른쪽:40px; 테두리 스타일:홈; } 인디고 주차 { 디스플레이:블록; 배경색:#dddddd; 패딩:30px; 글꼴 크기:70px; 라인 높이:60%; 여백-왼쪽:40px; 여백 오른쪽:40px; 테두리 스타일:홈; } div.container { 여백:15px; } div.left, div.right { float:왼쪽; 패딩:10px; } div.left { 배경색:흰색; 너비:900픽셀; 높이:500px; } div.right { 배경색:#dddddd; 너비:360픽셀; 높이:400픽셀; 여백 상단:20px; 여백-바닥:100px; }    

    ARTIK 클라우드 기반 스마트 주차 시스템

    직원 주차

    메인 Cmapus 근처

    데이터 수신 중...

    1

    학생/손님 주차

    정문, Union bank 부근

    데이터 수신 중...

    출력 콘솔

    <스크립트> 함수 myMap() { var mapCanvas =document.getElementById("지도"); var mapOptions ={ 센터:new google.maps.LatLng(11.476534,77.999759 ), 확대/축소:11 } var map =new google.maps.Map(mapCanvas, mapOptions); var rainbow_marker =new google.maps.Marker({ // 아래 줄은 다음과 같습니다. // position:new google.maps.LatLng(-34.397, 150.644) position:{lat:11.477627, lng:78.005038}, map :지도 }); var indigo_marker =new google.maps.Marker({ // 아래 줄은 다음과 같습니다. // position:new google.maps.LatLng(-34.397, 150.644) position:{lat:11.476765, lng:78.000328 }, map :지도 }); var infowindow =new google.maps.InfoWindow({ content:'

    직원 주차장, 17, 무료 학교 거리

    ' }); var infowindowindigo =new google.maps.InfoWindow({ content:'

    Indigo Parking, 29, Progoti Street

    ' }); google.maps.event.addListener(rainbow_marker, '클릭', function() { infowindow.open(지도, rainbow_marker); }); google.maps.event.addListener(indigo_marker, '클릭', function() { infowindowindigo.open(map, indigo_marker); }); } <스크립트 src="https://maps.googleapis.com/maps/api/js?callback=myMap">
    웹 앱(클라이언트 측)자바스크립트
    // websocket을 사용하여 실시간 상호작용이 가능합니다.// ws:에 주목하세요. 이것은 WebSocket 연결을 위한 새로운 URL 스키마입니다. // 동일한 방식으로 보안 WebSocket 연결을 위한 wss:도 있습니다. // https:는 보안 HTTP 연결에 사용됩니다.// Artik 클라우드 문서에서 얻을 수 있습니다. pagevar wsUri ="wss://api.artik.cloud/v1 .1/websocket?ack=true";var device_id ="귀하의 장치 ID"; // raspi3 DEVICE IDvar device_token ="귀하의 장치 토큰"; //raspi3 DEVICE TOKENvar output;var attributes_log;var websocket;function init() { // document.getElementById() html 페이지에 쓰기 output =document.getElementById("output"); attribute_log =document.getElementById("속성 로그"); if (browserSupportsWebSockets() ===false) { // 브라우저가 websocket 프로토콜을 지원하는지 확인하거나 writeToScreen("죄송합니다! 귀하의 웹 브라우저는 WebSockets를 지원하지 않습니다. Google Chrome 또는 Firefox 최신 버전을 사용해 보세요."); var 요소 =document.getElementById("웹 소켓 요소"); element.parentNode.removeChild(요소); 반품; // } // 단순히 WebSocket 생성자를 호출하여 WebSocket 연결을 엽니다. websocket =new WebSocket(wsUri); //연결이 열리면 자동으로 함수가 호출됨 websocket.onopen =function() { //writeAttributeValues('onOpen Event Fired'); writeToScreen("주차 시스템에 성공적으로 연결되었습니다."); // 연결이 열린 후 안전한 데이터 전송을 위해 등록이 필요합니다. register(); }; // 새 메시지 수신 시 호출 websocket.onmessage =function(evt) { onMessage(evt); }; // when 수신 오류 // 발생하는 모든 오류는 오류 이벤트를 수신 대기하여 처리할 수 있습니다. websocket.onerror =function(evt) { onError(evt); };}function onClose(evt) { // WebSocket 사용이 끝나면 close() 메서드를 사용하여 연결을 종료할 수 있습니다. websocket.close(); //writeAttributeValues('onClose 이벤트 발생'); writeToScreen("DISCONNECTED");}// 메시지가 수신되면 메시지 이벤트가 시작됩니다. function onMessage(evt) { writeToScreen('응답:' + evt.data + ''); //writeAttributeValues('onMessage 이벤트 발생'); 핸들RcvMsg(이벤트 데이터); // 데이터가 함수로 전송됩니다. handleRcvMsg()}function onError(evt) { writeToScreen('ERROR: ' + evt.data); //writeAttributeValues('onError Event Fired');}function doSend(message) { // WebSocket 연결을 통해 메시지를 보내려면 WebSocket 인스턴스에서 send() 메서드를 호출합니다. websocket.send(message); //writeAttributeValues('onSend 이벤트 발생'); writeToScreen("SENT:" + 메시지);} 함수 writeAttributeValues(접두사) { var pre =document.createElement("p"); pre.style.wordWrap ="브레이크 워드"; pre.innerHTML ="정보" + getCurrentDate() + " " + 접두사 + " readyState:" + websocket.readyState + " bufferedAmount:" + websocket.bufferedAmount + "";; attribute_log.appendChild(pre);} 함수 writeToScreen(message) { var pre =document.createElement("p"); pre.style.wordWrap ="브레이크 워드"; pre.innerHTML =메시지; output.appendChild(pre);}function getCurrentDate() { var now =new Date(); var datetime =now.getFullYear() + '/' + (now.getMonth() + 1) + '/' + now.getDate(); 날짜 시간 +=' ' + now.getHours() + ':' + now.getMinutes() + ':' + now.getSeconds(); return datetime;}function browserSupportsWebSockets() { if ("WebSocket" in window) { return true; } else { false를 반환합니다. }}function getTimeMillis(){ return parseInt(Date.now().toString());}function register(){ writeToScreen("WebSocket 연결에 장치 등록"); try{ var registerMessage ='{"유형":"register", "sdid":"'+device_id+'", "Authorization":"bearer '+device_token+'", "cid":"'+getTimeMillis()+' "}'; writeToScreen('등록 메시지 보내기 ' + registerMessage + '\n'); websocket.send(registerMessage, {마스크:true}); isWebSocketReady =참; //document.getElementById("무지개").innerHTML =""; //document.getElementById("rainbow").innerHTML ="용량:"+'50 '+"무료 슬롯:"+''+"50"; //document.getElementById("indigo").innerHTML ="용량:60, 여유 슬롯:5"; } catch (e) { writeToScreen('메시지 등록 실패. 메시지 등록 오류:' + e.toString()); } }//처리를 위해 수신 후 데이터가 여기에 전송됩니다. handleRcvMsg(msg){ // 메시지는 다음 문자열로 수신됩니다. // {"actions":[{"name":"setText","parameters":{"text" :"4", "text2":"5"}}]} // 구문 분석해야 합니다. var msgObj =JSON.parse(msg); if (msgObj.type !="action") 반환; // 조기 귀환; var 작업 =msgObj.data.actions; var rainbowData =action[0].parameters.text; var indigoData =action[0].parameters.text2; console.log("수신된 액션은 " + 액션); document.getElementById("rainbow").innerHTML ="정원:50, 여유 슬롯:"+rainbowData; document.getElementById("indigo").innerHTML ="용량:60, 여유 슬롯:"+indigoData; }
    스마트 주차 시스템용 소스 코드
    필요한 모든 코드와 파일은 이 Github 저장소에 포함되어 있습니다.https://github.com/husinul/Smart-Car-Parking

    회로도


    제조공정

    1. C# 생성자
    2. C# 사용
    3. Smart Bartender
    4. 빌딩 관리 시스템:스마트 시티로 가는 티켓
    5. 온실용 스마트 조명 제어로 비용 절감
    6. 다양한 재료를 감지하는 스마트 레이저 절단기 시스템
    7. 컨베이어 시스템 이해
    8. 자동차 잭 시스템의 이해
    9. 서스펜션 시스템 이해
    10. 자동차 히터가 운전할 때만 작동하는 이유는 무엇입니까?