# Remote to Raspberry Pi

## **Remote to Raspberry Pi**

&#x20;       การใช้งานบอร์ด RaspberryPi เป็นเหมือนคอมพิวเตอร์ขนาดเล็กจะต้องทำการต่อจอแสดงผลและ คีย์บอร์ดเพิ่มเพื่อให้สามารถใช้งานโดยตรงได้ การ Remote เป็นอีกวิธีหนึ่งในการเข้าใช้งานบอร์ด RaspberryPi โดยไม่จำเป็นต้องหาอุปกรณ์ต่อพ่วงเข้าไปกับบอร์ด เพื่อเพิ่มความสะดวกในการใช้งาน ซึ่งวิธีการ remote นั้นมีหลายวิธียกตัวอย่างเช่น การใช้ Secure shell(SSH) protocol ที่เป็นการเข้าถึง Raspberry pi โดยใช้ command line  หรือ Virtual Network Computing (VNC) ที่สามารถเข้าถึง Raspberry pi และสามารถควบคุมโดยแสดงหน้า Desktop ของ  Raspberry Pi บนคอมพิวเตอร์ให้ด้วย อย่างไรก็ตามทั้งสองแบบจะสามารถเข้าถึง Raspberry pi ได้จะต้องรู้ IP address ของ RaspberryPi ก่อน

### **How to Find IP adress**

&#x20;       เนื่องจาก Raspberry Pi OS รองรับ multicast Domain Name System (mDNS) เราสามารถสแกนหา IP address ของ Raspberry pi ได้จากชื่อ hostname ตามด้วย .local จากแล็ปก่อนหน้านี้เรา ตั้งค่าเริ่มต้น hostname ว่า “raspberrypi” ไว้ก่อนที่ flash OS ลง SD card ดังนั้นเราสามารถ scan หา IP address ของ raspberry pi ด้วย command line ด้านล่างนี้<br>

For Windows, Linux/mac

```
ping raspberrypi.local
```

## **Secure Shell (SSH)**

เมื่อเราทราบ IP address ของ raspberry pi แล้วเราสามารถ Remote โดย ใช้ SSH Command line บน mac/Linux terminal หรือ command Prompt บน Windows ดังนี้

```
ssh pi@raspberrypi.local
```

{% hint style="success" %}
Password ของ Raspberry Pi คือ "raspberry"
{% endhint %}

{% hint style="danger" %}
\*\*\*หมายเหตุ network ของบอร์ด RaspberryPi และคอมพิวเตอร์ที่ต้องการ Remote ต้องอยู่ใน local เดียวกันและ ทำการตั้งค่า ssh interface บนบอร์ดแล้ว
{% endhint %}

### **LAB1: ทดสอบคอมไพล์และรันโปรแกรม hello.c**

<mark style="color:blue;">คำสั่งพื้นฐานที่ใช้มีดังนี้ cd, cat, mkdir</mark>

&#x20;   หลังจาก Remote เข้า Raspberry Pi แล้วให้ทำการเขียน โปรแกรม hello.c ด้วยคำสั่ง cat ลงในไดเรกทอรี lab01 โดย code มีดังนี้

```c
#include <stdio.h>
int main()
{
int i;
for (i=0; i<10; i++) printf(“hello world\n”);
}
```

เราสามารถคอมไพล์โปรแกรมภาษา c ด้วยคำสั่งนี้

```
gcc -o hello hello.c
```

เราสามารถรันโปรแกรมได้โดยใช้ไฟล์ที่คอมไพล์แล้ว

```
./hello
```

![ผลการรัน](https://paper-attachments.dropbox.com/s_F6F75A47E13B2FD68708D0872BC03717947B977C1BC36EB102A875C95250D19E_1659416257775_image.png)

### **แบบฝึกหัดที่ 1:**&#x20;

&#x20;    1\. จงใช้คำสั่ง mkdir สร้างไดเรกทอรีไฟล์ไฟล์ ชื่อ “hello101” และใช้คำสั่ง cat สำหรับสร้างไฟล์ โดยแต่ละไฟล์ให้ใส่ข้อมูลดังนี้

1. id.txt ให้ใส่ รหัสนิสิต
2. name.txt ให้ใส่ ชื่อ นามสกุล

เมื่อใช้ คำสั่ง tree จะได้ผลตามภาพด้านล่าง

![โครงสร้างไฟล์ใน ไดเรกทอรี hello101](https://paper-attachments.dropbox.com/s_F6F75A47E13B2FD68708D0872BC03717947B977C1BC36EB102A875C95250D19E_1659417557731_image.png)

และ ใช้ คำสั่ง cat แสดงข้อมูลในแต่ละไฟล์บันทึกผลภาพข้อมูลที่แสดง&#x20;

&#x20;  2\. ใช้คำสั่ง cp สำหรับ copy ไฟล์ hello.c และ hello ที่คอมไพล์แล้วจากการทดลองก่อนหน้ามาไว้ในไดเรกทอรี hello101 แล้วใช้คำสั่ง tree เพื่อแสดงโครงสร้างไฟล์ทั้งหมดในไดเรกทอรี บันทึกผล

### **แบบฝึกหัดที่ 2:**&#x20;

&#x20;    ให้เลือก คำสั่ง 20 คำสั่ง จากลิ้ง [Basic Linux commands](https://www.guru99.com/linux-commands-cheat-sheet.html#3) บันทึกผลการใช้งานและอธิบายคำสั่งที่ใช้ โดยมีรูปแบบตารางการเก็บผลตามด้านล่างนี้

| No. | **คำสั่ง**  | คำอธิบาย    | ผลการทดลอง  |
| --- | ----------- | ----------- | ----------- |
| 1   | <p><br></p> | <p><br></p> | <p><br></p> |
| 2   | <p><br></p> | <p><br></p> | <p><br></p> |
| :   | <p><br></p> | <p><br></p> | <p><br></p> |
| 20  | <p><br></p> | <p><br></p> | <p><br></p> |

## **SSH-Putty tool**

สามารถ [Download ](https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html)และติดตั้งลงคอมพิวเตอร์เพื่อทดลองใช้ได้เลย สำหรับการใช้ putty สามารถทำได้ดังนี้

1.หลังจาก Dowload และติดตั้งโปรแกรม เปิดโปรแกรมจะพบหน้าต่างดังภาพด้านล่าง

2\. ระบุ IP address ของ RespberryPi ลงช่อง Host name และใช้ port 22&#x20;

3\. ตรวจสอบ Connection type ให้ติ๊ก SSH แล้วคลิ๊ก Open จะปรากฎหน้าต่างตามด้านล่าง

![หน้าต่าง setting putty](https://1856353139-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MClo3nC-1US0rbK8Qau%2F-MizY0pVYcsaPiChvy_7%2F-MizZePPF5x5Jzgdgw_9%2Fimage.png?alt=media\&token=02077460-27d3-4b69-9899-f40aa87b19c7)

* หลัง login as : พิมพ์ "pi" แล้ว enter เมื่อหน้าต่างขึ้นถามหารหัสผ่านของ RaspberryPi ใส่ดังนี้ "raspberry"

{% hint style="warning" %}
เมื่อพิมพ์รหัสผ่าน จะไม่มีตัวอักษรใด ๆ ปรากฎ โปรดพิมพ์รหัสให้ถูกต้อง
{% endhint %}

![หน้าต่าง login เพื่อ Remote เข้า Rpi โดยใช้ Putty](https://1856353139-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MClo3nC-1US0rbK8Qau%2F-MizY0pVYcsaPiChvy_7%2F-MizZI3ZDSXFanyAVN7v%2Ftempsnip.png?alt=media\&token=fe3b8400-bb72-42bf-8a93-ea1391e83f24)

* เมื่อปรากฎดังภาพด้านล่างแสดงว่าสามารถ Remote เข้า RespberryPi ได้สำเร็จ

![หน้าต่าง Remote Putty](https://1856353139-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MClo3nC-1US0rbK8Qau%2F-MizY0pVYcsaPiChvy_7%2F-Miz_kVNlHozEioKjMjT%2Fimage.png?alt=media\&token=f28a88f2-a772-4156-8eab-b8983ce2b14e)

* เมื่อ Remote สำเร็จเราสามารถใช้คำสั่ง command สำหรับใช้งาน RaspberryPi ได้เลย&#x20;

## SSH-WSL&#x20;

เราสามารถ Remote โดยใช้ ssh command บน Terminal Vscode ได้ดังนี้

1. เปิด Virtual studio code และตรวจสอบว่า ได้เชื่อมต่อกับ WSL แล้วหรือไม่

![Virtual studio code conneted WSL Ubuntu-18.04](https://1856353139-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MClo3nC-1US0rbK8Qau%2F-MOeeoj2PzkXjBZ6ZYpf%2F-MOeoVqHllupyHpdN3DL%2F1.png?alt=media\&token=2b80b0b4-7baa-4871-9f33-64229805c12a)

&#x20;ถ้า Virtual studio code ยังไม่เชื่อมต่อ WSL ให้ทำดังนี้

![](https://1856353139-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MClo3nC-1US0rbK8Qau%2F-MOeeoj2PzkXjBZ6ZYpf%2F-MOeqQlfX5yyXfjEsZJ1%2F1-2.png?alt=media\&token=c7da56c1-e1d1-4767-8495-bf50316a8c78)

&#x20;  คลิ๊ก ปุ่มสีเขียวมุมซ้ายด้านล่างของหน้าต่างโปรแกรม VScode&#x20;

![button Open a Remote Windows](https://1856353139-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MClo3nC-1US0rbK8Qau%2F-MOeeoj2PzkXjBZ6ZYpf%2F-MOerPZYDtxpGWEx0hu8%2Fimage.png?alt=media\&token=c4310590-2e67-4cb5-8f21-1473e79bce89)

&#x20;  หน้าต่างโปรแกรม Vscode จะแสดงช่องค้นหา

&#x20;           ให้เลือก Remote-WSL: New Window using Distro... >>Ubuntu 18.04  จะปรากฎหน้าต่าง Vscode ที่เชื่อมต่อ WSL&#x20;

![Open a Remote Windows](https://1856353139-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MClo3nC-1US0rbK8Qau%2F-MOeeoj2PzkXjBZ6ZYpf%2F-MOesLQnWxDA-NH8Pkkq%2F1-3.png?alt=media\&token=9f625952-97e4-4697-ba11-23430a0cf256)

ไปที่แถบเมนู เลือก terminal>>New terminal&#x20;

![](https://1856353139-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MClo3nC-1US0rbK8Qau%2F-MOeeoj2PzkXjBZ6ZYpf%2F-MOewFRZjdLxkjB1Sb8W%2F1-4.png?alt=media\&token=72fa4c10-7681-41bb-bfe9-7f2973f943d5)

## **Virtual Network Computing (VNC)**

&#x20;           เราสามารถเข้าถึง Raspberry pi และมี Desktop แสดงผลแบบกราฟฟิกบนคอมพิวเตอร์ของเราได้โดยการใช้ VNC ซึ่งใน Raspberry pi OS เราจะต้องเข้าไปตั้งค่าเปิดการใช้งาน VNC  ที่การตั้งค่า Interfaces ของ Raspberry Pi สำหรับบนเครื่องคอมพิวเตอร์ที่ต้องการเข้าถึง Raspberry Pi และมีกราฟฟิกแสดงผลดาวน์โหลดและติดตั้งโปรแกรม [VNC viewer](https://www.realvnc.com/en/connect/download/viewer/) ได้ทั้ง Linux mac และ Windows ตาม OS ของคอมพิวเตอร์ที่เราใช้ โดยใส่ IP address ของ Raspberry pi ลงไปในช่อง ค้นหา ถ้าสามารถสามารถเชื่อมต่อได้จะมีหน้า Desktop ของ raspberry pi แสดงขึ้นมาสามารถคลิ๊กเพื่อใชงานได้เลย ซึ่งโปรแกรมจะใช้หน้าจอคอมพิวเตอร์ของเราเป็นหน้าจอแสดงผลของ Raspberry Pi<br>

![](https://paper-attachments.dropbox.com/s_F6F75A47E13B2FD68708D0872BC03717947B977C1BC36EB102A875C95250D19E_1659410738323_image.png)

VNC Viewer Program\*\*\*รูปตัวอย่างการแสดงผลเชื่อมต่อ Rpi<br>

## **Using Secure Copy (SCP)**

&#x20;Secure Copy (SCP) เป็นคำสั่งสำหรับส่งไฟล์บน SSH protocol ซึ่งสามารถคัดลอกไฟล์ระหว่างคอมพิวเตอร์หรือ RaspberryPi ได้โดยจะต้องรู้ IP address ของ Raspberry Pi ที่เราต้องการส่งไฟล์ไป

### LAB2: คัดลอกไฟล์ hello\_world.cpp ไปยัง RaspberryPi

1. สร้างไฟล์ hello\_world.cpp แล้วใส่ code ด้านล่างลงไปแล้ว save&#x20;

```cpp
#include <iostream>
#include <vector>
#include <string>
using namespace std;
int main()
{
   vector<string> msg {"Hello", "C++", "World", "from", "VS Code", "and the C++ extension!"};
   for (const string& word : msg)
   {
      cout << word << " ";
   }
   cout << endl;
}
```

2\. คัดลอกไฟล์ hello\_world.cpp ไปยังไดเรกทอรี LAB1 ที่ได้สร้างก่อนหน้าใน RaspberryPi โดยใส่ คำสั่ง scp

```
scp hello_world.cpp pi@ip-address:~/ไดเรกทอรีLAB1
```

3\. เมื่อเข้าไปยังบอร์ด RaspberryPi อีกครั้งให้ตรวจสอบไฟล์ที่ได้ทำการคัดลอกมาในขั้นตอนก่อนหน้าที่โดยพิมพ์ ls บันทึกผล

4\. ทำการ compile code ภาษา c++ โดยใช้คำสั่งดังนี้&#x20;

```
g++ hello_world.cpp -o hello02
```

5\. ทดลองรันโปรแกรมและบันทึกผล

```
./hello2
```

6\. ใช้คำสั่ง tree และบันทึกภาพโครงสร้างไฟล์ที่มีในไดเรกทอรีทังหมด

Date: May 2023

Author: Soontree Jaikhong (AIC-Researcher)

Author: Thanaluk Pranekunakol (AIC-Researcher)
