โฮสต์จุดเชื่อมต่อ Wi-Fi ด้วย Raspberry Pi

บทช่วยสอนนี้จะอธิบายการโฮสต์ฮอตสปอตจากเครือข่าย Wi-Fi ของโรงแรมหรือการเชื่อมต่อเครือข่าย Wi-Fi สาธารณะใดๆ

โฮสต์จุดเชื่อมต่อ Wi-Fi ด้วย Raspberry Pi

คู่มือนี้จะอธิบายวิธีการโฮสต์ฮอตสปอตจากการเชื่อมต่อเครือข่าย Wi-Fi ของโรงแรม แต่กระบวนการเดียวกันนี้สามารถนำไปใช้กับเครือข่าย Wi-Fi สาธารณะใดๆ ที่ใช้พอร์ทัลแบบแคปทีฟ รวมถึงเครือข่ายสำหรับแขกในสนามบิน วิทยาเขตวิทยาลัย และร้านกาแฟ

เราจะเริ่มต้นด้วยการตั้งค่าฮอตสปอตที่บ้าน หากต้องการใช้ฮอตสปอตขณะที่คุณอยู่ที่โรงแรม โปรดดู การใช้ฮอตสปอ ต

กระสุนปืน

  • ราสเบอร์รี่พาย
  • แหล่งจ่ายไฟที่เหมาะสมสำหรับ Raspberry Pi (ดู รายละเอียดในเอกสารประกอบแหล่งจ่ายไฟ )
  • การ์ด MicroSD (ดู รายละเอียดในเอกสารการ์ด SD  )
  • อะแดปเตอร์สำหรับเชื่อมต่อการ์ด microSD ของคุณกับคอมพิวเตอร์ปกติของคุณ
  • อะแดปเตอร์ USB WiFi

ในการตั้งค่าการ์ด SD ของคุณในตอนแรก คุณจะต้องมี:

  • คอมพิวเตอร์เครื่องอื่นเชื่อมต่อกับเครือข่ายของคุณ เราจะเรียกเครื่องนี้ว่าคอมพิวเตอร์ธรรมดาของคุณเพื่อแยกความแตกต่างจากคอมพิวเตอร์ Raspberry Pi ที่คุณตั้งค่าเป็น NAS

การเลือกซื้อ Raspberry Pi ให้เหมาะสม

ยิ่ง Raspberry Pi ของคุณเร็วเท่าไหร่ ประสิทธิภาพการทำงานก็จะดีมากขึ้นเท่านั้น สำหรับบทช่วยสอนนี้ เราจะใช้ Raspberry Pi 4  2GB

คุณควรเลือก Raspberry Pi ที่มีโมดูล Wi-Fi ในตัว เพราะคุณจะต้องมีอุปกรณ์ Wi-Fi สองเครื่องเพื่อโฮสต์ฮอตสปอต Wi-Fi ของโรงแรม เครื่องหนึ่งเพื่อเชื่อมต่อกับเครือข่ายของโรงแรม และอีกเครื่องหนึ่งเพื่อกระจายเครือข่ายไปยังอุปกรณ์อื่นๆ ของคุณ

เลือกอะแดปเตอร์ USB Wi-Fi ที่เหมาะสม

อะแดปเตอร์ USB Wi-Fi ส่วนใหญ่ที่รองรับไดร์เวอร์ Linux ควรใช้งานได้

ในคู่มือนี้ เราใช้อะแดปเตอร์ 2.4 GHz 802.11 b/g/n ที่รวมอยู่ในชิปเซ็ต MediaTek MT7601U

เคล็ดลับ

หากคุณเลือก Raspberry Pi ที่ไม่มีโมดูล Wi-Fi ในตัว คุณจะต้องมีอะแดปเตอร์ Wi-Fi USB สองตัว อะแดปเตอร์ Wi-Fi ของคุณอย่างน้อยหนึ่งตัวต้องรองรับโหมด AP (จุดเชื่อมต่อ) เพื่อออกอากาศเครือข่ายฮอตสปอต

กำหนดค่า Raspberry Pi ของคุณ

หากต้องการเริ่มต้น ให้ทำตามเอกสารการเริ่มต้นใช้งานเพื่อตั้งค่า Raspberry Pi ของ คุณ สำหรับระบบปฏิบัติการของคุณ ให้เลือก Raspberry Pi OS Lite (32 บิต) เพื่อรันโดยไม่ต้องใช้จอภาพ (ไม่ต้องใช้เมาส์และคีย์บอร์ด)

ในช่วงการปรับแต่งระบบปฏิบัติการ ให้แก้ไขการตั้งค่าดังต่อไปนี้:

  • ป้อนชื่อโฮสต์ที่คุณต้องการ (เราแนะนำ pi-hotspot สำหรับคู่มือนี้)
  • กรอกชื่อผู้ใช้และรหัสผ่าน ; คุณจะต้องมีข้อมูลนี้เพื่อการตรวจสอบในภายหลัง
  • ทำเครื่องหมายในช่องข้างๆ กำหนดค่า LAN ไร้สายเพื่อให้ Pi ของคุณสามารถเชื่อมต่อกับ Wi-Fi โดยอัตโนมัติ
    • กรอก SSID (ชื่อ) และรหัสผ่านเครือข่ายของคุณ คุณสามารถค้นหาข้อมูลนี้ได้ในการตั้งค่า Wi-Fi หรือบนสติกเกอร์บนเราเตอร์ของคุณ
  • ในแท็บบริการ ให้ทำเครื่องหมายในช่องข้างๆ เปิดใช้งาน SSH เพื่อให้เราสามารถเชื่อมต่อกับ Pi ได้โดยไม่ต้องใช้เมาส์และคีย์บอร์ด
    • เปิดใช้งานการตรวจสอบรหัสผ่านสำหรับการเชื่อมต่อ SSH

การตั้งค่า Raspberry Pi ของคุณ

ปิด Raspberry Pi โดยการถอดปลั๊กออกจากแหล่งจ่ายไฟ จากนั้นเชื่อมต่ออะแดปเตอร์ USB WiFi (หรืออะแดปเตอร์หลายๆ ตัว) เข้ากับ Raspberry Pi สุดท้าย ให้เปิดเครื่อง Raspberry Pi โดยเสียบปลั๊กกลับเข้ากับแหล่งจ่ายไฟ

เชื่อมต่อกับ Raspberry Pi ของคุณจากระยะไกล

SSH ช่วยให้คุณสามารถเชื่อมต่อกับ Raspberry Pi ได้จากระยะไกล โดยไม่ต้องใช้คีย์บอร์ดและเมาส์ เหมาะอย่างยิ่งหาก Raspberry Pi ของคุณอยู่ในตำแหน่งที่เข้าถึงได้ยาก เช่น ด้านหลังของจอภาพ

บันทึก

หากต้องการเชื่อมต่อผ่าน SSH เข้าสู่ Raspberry Pi คุณจะต้องใช้ชื่อโฮสต์ที่คุณตั้งค่าโดยใช้ Raspberry Pi Imager หากคุณประสบปัญหาในการเชื่อมต่อโดยใช้วิธีนี้ คุณอาจต้องการใช้ที่อยู่ IP ของ Raspberry Pi แทน สำหรับข้อมูลเพิ่มเติมเกี่ยวกับการค้นหาที่อยู่ IP และการเข้าถึง Raspberry Pi จากระยะไกล โปรดดู เอกสารการเข้าถึงระยะ ไกล

เชื่อมต่อผ่าน SSH

เปิดเซสชันเทอร์มินัลบนคอมพิวเตอร์ปกติของคุณ หากต้องการเข้าถึง Raspberry Pi ผ่าน SSH ให้รันคำสั่งต่อไปนี้โดยแทนที่ <ชื่อผู้ใช้> ด้วยชื่อผู้ใช้ที่คุณเลือกใน Imager:

$ ssh <username>@pi-hotspot.local

$ ssh <username>@pi-hotspot.local
The authenticity of host 'pi-hotspot.local (fd81:b8a1:261d:1:acd4:610c:b069:ac16)' can't be established.
ED25519 key fingerprint is SHA256:s6aWAEe8xrbPmJzhctei7/gEQitO9mj2ilXigelBm04.
This key is not known by any other names
Are you sure you want to continue connecting (yes/no/
[fingerprint])? yes
Warning: Permanently added 'pi-hotspot.local' (ED25519) to the list of known hosts.

เมื่อได้รับแจ้งให้ใส่รหัสผ่าน ให้ใช้รหัสผ่านที่คุณสร้างไว้ใน Raspberry Pi Imager

กำหนดค่าฮอตสปอต

ตอนนี้ Raspberry Pi ของคุณพร้อมใช้งานแล้ว ถึงเวลาเปลี่ยนเป็นฮอตสปอตแล้ว

ค้นหาอะแดปเตอร์ USB Wi-Fi ของคุณ

ขั้นแรกเราต้องหาอะแดปเตอร์ USB เรียกใช้คำสั่งต่อไปนี้เพื่อระบุอุปกรณ์ Wi-Fi โดยใช้ Network Manager CLI:

$ nmcli device

คุณควรเห็นผลลัพธ์ที่คล้ายกับต่อไปนี้:

DEVICE         TYPE      STATE                   CONNECTION
wlan1          wifi      connected               Example Wi-Fi
lo             loopback  connected (externally)  lo
wlan0          wifi      disconnected            --
p2p-dev-wlan0  wifi-p2p  disconnected            --
eth0           ethernet  unavailable             --

ในเอาต์พุตข้างต้น โมดูล USB Wi-Fi, wlan1 เชื่อมต่อกับเครือข่าย Wi-Fi ชื่อ "ตัวอย่าง Wi-Fi" อุปกรณ์ Wi-Fi ในตัว wlan0 ไม่ได้ใช้งานอยู่ในขณะนี้ ดังนั้นสถานะปัจจุบันจึงเป็น "ไม่ได้เชื่อมต่อ"

หาก Raspberry Pi ของคุณมีโมดูล Wi-Fi ในตัว ตามค่าเริ่มต้นจะแสดงเป็น wlan0 โมดูล Wi-Fi แรกที่คุณเชื่อมต่อจะแสดงเป็น wlan1 และอะแดปเตอร์ตัวถัดไปจะแสดงเป็น wlan2, wlan3 เป็นต้น ขึ้นอยู่กับการกำหนดค่าเฉพาะของคุณ Raspberry Pi ของคุณอาจเชื่อมต่อกับเครือข่ายโดยใช้ทั้งอะแดปเตอร์ USB หรือโมดูล Wi-Fi ในตัว

สร้างเครือข่ายฮอตสปอต

ต่อไปเราจะใช้โมดูล Wi-Fi ในตัวเพื่อกระจายสัญญาณเครือข่ายฮอตสปอต รันคำสั่งต่อไปนี้เพื่อสร้างฮอตสปอตโดยแทนที่ตัวแทน <ชื่อฮอตสปอต> และ <รหัสผ่านฮอตสปอต> ด้วยชื่อฮอตสปอตและรหัสผ่านที่คุณเลือก:

$ sudo nmcli device wifi hotspot ssid <hotspot name> password <hotspot password> ifname wlan0

เคล็ดลับ

ตัวเลือก ifname wlan0 ที่ส่วนท้ายของคำสั่งนี้ระบุว่าฮอตสปอตจะต้องใช้โมดูล Wi-Fi แบบบูรณาการซึ่งรองรับโหมด AP (จุดเชื่อมต่อ) ที่จำเป็นในการกระจายสัญญาณเครือข่ายฮอตสปอต หากต้องการโฮสต์ฮอตสปอตจาก Raspberry Pi โดยไม่มีโมดูล Wi-Fi ในตัว ให้ระบุอินเทอร์เฟซที่สอดคล้องกับอะแดปเตอร์ USB ที่รองรับโหมด AP

เมื่อคุณสร้างเครือข่ายฮอตสปอตแล้ว ฮอตสปอตของคุณจะทำงานโดยอัตโนมัติ

ขั้นตอนต่อไปคือการเชื่อมต่อกับฮอตสปอต Wi-Fi จากคอมพิวเตอร์ปกติของคุณ ค้นหาเครือข่ายที่มี SSID ตรงกับชื่อฮอตสปอตที่คุณเลือกในขั้นตอนก่อนหน้า ใช้รหัสผ่านที่คุณให้ไว้ในขั้นตอนนั้นเพื่อยืนยันตัวตน

จากนั้นเชื่อมต่อกับ Raspberry Pi ของคุณโดยใช้ SSH:

$ ssh <username>@pi-hotspot.local

และรันคำสั่งต่อไปนี้เพื่อดูการเชื่อมต่อปัจจุบันของคุณ:

$ nmcli connection

คุณควรเห็นผลลัพธ์ที่คล้ายกับต่อไปนี้:

NAME       UUID                                  TYPE      DEVICE
Hotspot    69d77a03-1cd1-4ec7-bd78-2eb6cd5f1386  wifi      wlan0
lo         f0209dd9-8416-40a0-971d-860d3ff3501b  loopback  lo
Ethernet   4c8098c7-9f7d-4e3e-a27a-70d54235ec9a  ethernet  --
Example 1  f0c4fbcc-ac88-4791-98c2-e75685c70e9f  wifi      --
Example 2  9c6098a7-ac88-40a0-5ac2-b75695c70e9e  wifi      --

การเชื่อมต่อที่ชื่อ Hotspot แสดงถึงเครือข่าย Hotspot ใหม่ของคุณ การเชื่อมต่อตัวอย่างที่ 1 และตัวอย่างที่ 2 ข้างต้นแสดงถึงการเชื่อมต่อ Wi-Fi ที่บันทึกไว้แต่ไม่ทำงาน

กำหนดค่าเครือข่ายฮอตสปอต

กำหนดค่าเครือข่ายฮอตสปอตของคุณให้ออกอากาศอัตโนมัติทุกครั้งที่ Raspberry Pi ของคุณบูต เมื่อ Raspberry Pi ของคุณบูต มันจะเริ่มการเชื่อมต่อใดๆ ที่มีการเปิดใช้งานการเชื่อมต่ออัตโนมัติด้วยลำดับความสำคัญสูงสุด เพื่อให้แน่ใจว่าฮอตสปอตของคุณจะเริ่มทำงานทุกครั้งที่บูต เราจะเปิดใช้งานการเชื่อมต่ออัตโนมัติสำหรับฮอตสปอตและกำหนดค่าให้มีความสำคัญสูงกว่าการเชื่อมต่ออื่นๆ

เรียกใช้คำสั่งการเชื่อมต่อ nmcli ด้านบนอีกครั้งและคัดลอก UUID สำหรับเครือข่ายฮอตสปอตของคุณจากตาราง จากนั้นรันคำสั่งต่อไปนี้เพื่อดูคุณสมบัติการเชื่อมต่อสำหรับเครือข่ายฮอตสปอตของคุณโดยแทนที่ตัวแทน <hotspot UUID> ด้วย UUID สำหรับฮอตสปอตของคุณ:

$ nmcli connection show <hotspot UUID>

ผลลัพธ์จะประกอบด้วยคุณสมบัติหลายประการที่อธิบายเครือข่ายฮอตสปอตของคุณ แต่อย่างไรก็ตาม ในขณะนี้เราสนใจเพียงสองคุณสมบัติต่อไปนี้เท่านั้น:

connection.autoconnect:                 no
connection.autoconnect-priority:        0

เรียกใช้คำสั่งต่อไปนี้เพื่อเปลี่ยนลำดับความสำคัญและคุณสมบัติเชื่อมต่ออัตโนมัติสำหรับฮอตสปอตของคุณโดยแทนที่ตัวแทน <hotspot UUID> ด้วย UUID สำหรับฮอตสปอตที่คุณคัดลอกไปยังคลิปบอร์ดก่อนหน้านี้:

$ sudo nmcli connection modify <hotspot UUID> connection.autoconnect yes connection.autoconnect-priority 100

หากดำเนินการคำสั่งของคุณสำเร็จ เราควรเห็นค่าใหม่ต่อไปนี้สำหรับคุณสมบัติเหล่านั้นเมื่อเราเรียกใช้ nmcli connection show <hotspot UUID> อีกครั้ง:

connection.autoconnect:                 yes
connection.autoconnect-priority:        100

การกำหนดค่าพอร์ต

ต่อไปเราจะมาตั้งค่าเว็บไซต์พอร์ทัลที่ช่วยให้คุณเชื่อมต่อ Raspberry Pi กับเครือข่าย Wi-Fi ของโรงแรมจากเบราว์เซอร์ได้อย่างง่ายดาย

ติดตั้งเครื่องมือดังต่อไปนี้:

$ sudo apt install python3-flask

จากนั้นรันคำสั่งต่อไปนี้เพื่อสร้างไดเร็กทอรีที่เราสามารถสร้างพอร์ทัลที่เรียกว่า wifi-portal:

$ mkdir ~/wifi-portal

จากนั้นไปที่ไดเร็กทอรีพอร์ทัล:

$ cd ~/wifi-portal

เปิด app.py ในโฟลเดอร์พอร์ทัลซึ่งประกอบด้วยลอจิกสำหรับไซต์พอร์ทัล:

$ sudo nano app.py

คัดลอกและวางโค้ดต่อไปนี้ลงใน app.py:

from flask import Flask,request
import subprocess

app = Flask(__name__)

wifi_device = "wlan1"

@app.route('/')
def index():
    result = subprocess.check_output(["nmcli", "--colors", "no", "-m", "multiline", "--get-value", "SSID", "dev", "wifi", "list", "ifname", wifi_device])
    ssids_list = result.decode().split('\n')
    dropdowndisplay = f"""
        <!DOCTYPE html>
        <html>
        <head>
            <title>Wifi Control</title>
        </head>
        <body>
            <h1>Wifi Control</h1>
            <form action="/submit" method="post">
                <label for="ssid">Choose a WiFi network:</label>
                <select name="ssid" id="ssid">
        """
    for ssid in ssids_list:
        only_ssid = ssid.removeprefix("SSID:")
        if len(only_ssid) > 0:
            dropdowndisplay += f"""
                    <option value="{only_ssid}">{only_ssid}</option>
            """
    dropdowndisplay += f"""
                </select>
                <p/>
                <label for="password">Password: <input type="password" name="password"/></label>
                <p/>
                <input type="submit" value="Connect">
            </form>
        </body>
        </html>
        """
    return dropdowndisplay


@app.route('/submit',methods=['POST'])
def submit():
    if request.method == 'POST':
        print(*list(request.form.keys()), sep = ", ")
        ssid = request.form['ssid']
        password = request.form['password']
        connection_command = ["nmcli", "--colors", "no", "device", "wifi", "connect", ssid, "ifname", wifi_device]
        if len(password) > 0:
          connection_command.append("password")
          connection_command.append(password)
        result = subprocess.run(connection_command, capture_output=True)
        if result.stderr:
            return "Error: failed to connect to wifi network: <i>%s</i>" % result.stderr.decode()
        elif result.stdout:
            return "Success: <i>%s</i>" % result.stdout.decode()
        return "Error: failed to connect."


if __name__ == '__main__':
    app.run(debug=True, host='0.0.0.0', port=80)

กด Ctrl+X จากนั้นกด Y และกด Enter เพื่อบันทึกไฟล์ที่แก้ไขใน nano

ขั้นตอนต่อไปคือการกำหนดค่า Raspberry Pi ของคุณให้รันเกตเวย์ Wi-Fi โดยอัตโนมัติหลังจากบูตเครื่อง เรียกใช้คำสั่งต่อไปนี้เพื่อเปิดแท็บ cron ซึ่งเป็นเครื่องมือจัดกำหนดการของ Linux:

$ crontab -e

ป้อน 1 เพื่อใช้ตัวแก้ไขข้อความนาโนในการแก้ไขกำหนดการ cron ของคุณ จากนั้นเพิ่มบรรทัดต่อไปนี้ลงในไฟล์ โดยแทนที่ <ชื่อผู้ใช้> ด้วยชื่อผู้ใช้บัญชีผู้ดูแลระบบ Raspberry Pi ของคุณ:

@reboot sudo python3 /home/<username>/wifi-portal/app.py

กด Ctrl+X จากนั้นกด Y และกด Enter เพื่อบันทึกไฟล์ที่แก้ไขใน nano

และป้อนคำสั่งต่อไปนี้เพื่อรีบูต Raspberry Pi ของคุณ:

$ sudo reboot

ตอนนี้คุณพร้อมที่จะเชื่อมต่อกับเครือข่าย Wi-Fi ของโรงแรมใดๆ แล้ว!

โฮสต์จุดเชื่อมต่อ Wi-Fi ด้วย Raspberry Pi

บทช่วยสอนนี้จะอธิบายการโฮสต์ฮอตสปอตจากเครือข่าย Wi-Fi ของโรงแรมหรือการเชื่อมต่อเครือข่าย Wi-Fi สาธารณะใดๆ

นักเขียนบทความ
by 
นักเขียนบทความ
โฮสต์จุดเชื่อมต่อ Wi-Fi ด้วย Raspberry Pi

โฮสต์จุดเชื่อมต่อ Wi-Fi ด้วย Raspberry Pi

บทช่วยสอนนี้จะอธิบายการโฮสต์ฮอตสปอตจากเครือข่าย Wi-Fi ของโรงแรมหรือการเชื่อมต่อเครือข่าย Wi-Fi สาธารณะใดๆ

คู่มือนี้จะอธิบายวิธีการโฮสต์ฮอตสปอตจากการเชื่อมต่อเครือข่าย Wi-Fi ของโรงแรม แต่กระบวนการเดียวกันนี้สามารถนำไปใช้กับเครือข่าย Wi-Fi สาธารณะใดๆ ที่ใช้พอร์ทัลแบบแคปทีฟ รวมถึงเครือข่ายสำหรับแขกในสนามบิน วิทยาเขตวิทยาลัย และร้านกาแฟ

เราจะเริ่มต้นด้วยการตั้งค่าฮอตสปอตที่บ้าน หากต้องการใช้ฮอตสปอตขณะที่คุณอยู่ที่โรงแรม โปรดดู การใช้ฮอตสปอ ต

กระสุนปืน

  • ราสเบอร์รี่พาย
  • แหล่งจ่ายไฟที่เหมาะสมสำหรับ Raspberry Pi (ดู รายละเอียดในเอกสารประกอบแหล่งจ่ายไฟ )
  • การ์ด MicroSD (ดู รายละเอียดในเอกสารการ์ด SD  )
  • อะแดปเตอร์สำหรับเชื่อมต่อการ์ด microSD ของคุณกับคอมพิวเตอร์ปกติของคุณ
  • อะแดปเตอร์ USB WiFi

ในการตั้งค่าการ์ด SD ของคุณในตอนแรก คุณจะต้องมี:

  • คอมพิวเตอร์เครื่องอื่นเชื่อมต่อกับเครือข่ายของคุณ เราจะเรียกเครื่องนี้ว่าคอมพิวเตอร์ธรรมดาของคุณเพื่อแยกความแตกต่างจากคอมพิวเตอร์ Raspberry Pi ที่คุณตั้งค่าเป็น NAS

การเลือกซื้อ Raspberry Pi ให้เหมาะสม

ยิ่ง Raspberry Pi ของคุณเร็วเท่าไหร่ ประสิทธิภาพการทำงานก็จะดีมากขึ้นเท่านั้น สำหรับบทช่วยสอนนี้ เราจะใช้ Raspberry Pi 4  2GB

คุณควรเลือก Raspberry Pi ที่มีโมดูล Wi-Fi ในตัว เพราะคุณจะต้องมีอุปกรณ์ Wi-Fi สองเครื่องเพื่อโฮสต์ฮอตสปอต Wi-Fi ของโรงแรม เครื่องหนึ่งเพื่อเชื่อมต่อกับเครือข่ายของโรงแรม และอีกเครื่องหนึ่งเพื่อกระจายเครือข่ายไปยังอุปกรณ์อื่นๆ ของคุณ

เลือกอะแดปเตอร์ USB Wi-Fi ที่เหมาะสม

อะแดปเตอร์ USB Wi-Fi ส่วนใหญ่ที่รองรับไดร์เวอร์ Linux ควรใช้งานได้

ในคู่มือนี้ เราใช้อะแดปเตอร์ 2.4 GHz 802.11 b/g/n ที่รวมอยู่ในชิปเซ็ต MediaTek MT7601U

เคล็ดลับ

หากคุณเลือก Raspberry Pi ที่ไม่มีโมดูล Wi-Fi ในตัว คุณจะต้องมีอะแดปเตอร์ Wi-Fi USB สองตัว อะแดปเตอร์ Wi-Fi ของคุณอย่างน้อยหนึ่งตัวต้องรองรับโหมด AP (จุดเชื่อมต่อ) เพื่อออกอากาศเครือข่ายฮอตสปอต

กำหนดค่า Raspberry Pi ของคุณ

หากต้องการเริ่มต้น ให้ทำตามเอกสารการเริ่มต้นใช้งานเพื่อตั้งค่า Raspberry Pi ของ คุณ สำหรับระบบปฏิบัติการของคุณ ให้เลือก Raspberry Pi OS Lite (32 บิต) เพื่อรันโดยไม่ต้องใช้จอภาพ (ไม่ต้องใช้เมาส์และคีย์บอร์ด)

ในช่วงการปรับแต่งระบบปฏิบัติการ ให้แก้ไขการตั้งค่าดังต่อไปนี้:

  • ป้อนชื่อโฮสต์ที่คุณต้องการ (เราแนะนำ pi-hotspot สำหรับคู่มือนี้)
  • กรอกชื่อผู้ใช้และรหัสผ่าน ; คุณจะต้องมีข้อมูลนี้เพื่อการตรวจสอบในภายหลัง
  • ทำเครื่องหมายในช่องข้างๆ กำหนดค่า LAN ไร้สายเพื่อให้ Pi ของคุณสามารถเชื่อมต่อกับ Wi-Fi โดยอัตโนมัติ
    • กรอก SSID (ชื่อ) และรหัสผ่านเครือข่ายของคุณ คุณสามารถค้นหาข้อมูลนี้ได้ในการตั้งค่า Wi-Fi หรือบนสติกเกอร์บนเราเตอร์ของคุณ
  • ในแท็บบริการ ให้ทำเครื่องหมายในช่องข้างๆ เปิดใช้งาน SSH เพื่อให้เราสามารถเชื่อมต่อกับ Pi ได้โดยไม่ต้องใช้เมาส์และคีย์บอร์ด
    • เปิดใช้งานการตรวจสอบรหัสผ่านสำหรับการเชื่อมต่อ SSH

การตั้งค่า Raspberry Pi ของคุณ

ปิด Raspberry Pi โดยการถอดปลั๊กออกจากแหล่งจ่ายไฟ จากนั้นเชื่อมต่ออะแดปเตอร์ USB WiFi (หรืออะแดปเตอร์หลายๆ ตัว) เข้ากับ Raspberry Pi สุดท้าย ให้เปิดเครื่อง Raspberry Pi โดยเสียบปลั๊กกลับเข้ากับแหล่งจ่ายไฟ

เชื่อมต่อกับ Raspberry Pi ของคุณจากระยะไกล

SSH ช่วยให้คุณสามารถเชื่อมต่อกับ Raspberry Pi ได้จากระยะไกล โดยไม่ต้องใช้คีย์บอร์ดและเมาส์ เหมาะอย่างยิ่งหาก Raspberry Pi ของคุณอยู่ในตำแหน่งที่เข้าถึงได้ยาก เช่น ด้านหลังของจอภาพ

บันทึก

หากต้องการเชื่อมต่อผ่าน SSH เข้าสู่ Raspberry Pi คุณจะต้องใช้ชื่อโฮสต์ที่คุณตั้งค่าโดยใช้ Raspberry Pi Imager หากคุณประสบปัญหาในการเชื่อมต่อโดยใช้วิธีนี้ คุณอาจต้องการใช้ที่อยู่ IP ของ Raspberry Pi แทน สำหรับข้อมูลเพิ่มเติมเกี่ยวกับการค้นหาที่อยู่ IP และการเข้าถึง Raspberry Pi จากระยะไกล โปรดดู เอกสารการเข้าถึงระยะ ไกล

เชื่อมต่อผ่าน SSH

เปิดเซสชันเทอร์มินัลบนคอมพิวเตอร์ปกติของคุณ หากต้องการเข้าถึง Raspberry Pi ผ่าน SSH ให้รันคำสั่งต่อไปนี้โดยแทนที่ <ชื่อผู้ใช้> ด้วยชื่อผู้ใช้ที่คุณเลือกใน Imager:

$ ssh <username>@pi-hotspot.local

$ ssh <username>@pi-hotspot.local
The authenticity of host 'pi-hotspot.local (fd81:b8a1:261d:1:acd4:610c:b069:ac16)' can't be established.
ED25519 key fingerprint is SHA256:s6aWAEe8xrbPmJzhctei7/gEQitO9mj2ilXigelBm04.
This key is not known by any other names
Are you sure you want to continue connecting (yes/no/
[fingerprint])? yes
Warning: Permanently added 'pi-hotspot.local' (ED25519) to the list of known hosts.

เมื่อได้รับแจ้งให้ใส่รหัสผ่าน ให้ใช้รหัสผ่านที่คุณสร้างไว้ใน Raspberry Pi Imager

กำหนดค่าฮอตสปอต

ตอนนี้ Raspberry Pi ของคุณพร้อมใช้งานแล้ว ถึงเวลาเปลี่ยนเป็นฮอตสปอตแล้ว

ค้นหาอะแดปเตอร์ USB Wi-Fi ของคุณ

ขั้นแรกเราต้องหาอะแดปเตอร์ USB เรียกใช้คำสั่งต่อไปนี้เพื่อระบุอุปกรณ์ Wi-Fi โดยใช้ Network Manager CLI:

$ nmcli device

คุณควรเห็นผลลัพธ์ที่คล้ายกับต่อไปนี้:

DEVICE         TYPE      STATE                   CONNECTION
wlan1          wifi      connected               Example Wi-Fi
lo             loopback  connected (externally)  lo
wlan0          wifi      disconnected            --
p2p-dev-wlan0  wifi-p2p  disconnected            --
eth0           ethernet  unavailable             --

ในเอาต์พุตข้างต้น โมดูล USB Wi-Fi, wlan1 เชื่อมต่อกับเครือข่าย Wi-Fi ชื่อ "ตัวอย่าง Wi-Fi" อุปกรณ์ Wi-Fi ในตัว wlan0 ไม่ได้ใช้งานอยู่ในขณะนี้ ดังนั้นสถานะปัจจุบันจึงเป็น "ไม่ได้เชื่อมต่อ"

หาก Raspberry Pi ของคุณมีโมดูล Wi-Fi ในตัว ตามค่าเริ่มต้นจะแสดงเป็น wlan0 โมดูล Wi-Fi แรกที่คุณเชื่อมต่อจะแสดงเป็น wlan1 และอะแดปเตอร์ตัวถัดไปจะแสดงเป็น wlan2, wlan3 เป็นต้น ขึ้นอยู่กับการกำหนดค่าเฉพาะของคุณ Raspberry Pi ของคุณอาจเชื่อมต่อกับเครือข่ายโดยใช้ทั้งอะแดปเตอร์ USB หรือโมดูล Wi-Fi ในตัว

สร้างเครือข่ายฮอตสปอต

ต่อไปเราจะใช้โมดูล Wi-Fi ในตัวเพื่อกระจายสัญญาณเครือข่ายฮอตสปอต รันคำสั่งต่อไปนี้เพื่อสร้างฮอตสปอตโดยแทนที่ตัวแทน <ชื่อฮอตสปอต> และ <รหัสผ่านฮอตสปอต> ด้วยชื่อฮอตสปอตและรหัสผ่านที่คุณเลือก:

$ sudo nmcli device wifi hotspot ssid <hotspot name> password <hotspot password> ifname wlan0

เคล็ดลับ

ตัวเลือก ifname wlan0 ที่ส่วนท้ายของคำสั่งนี้ระบุว่าฮอตสปอตจะต้องใช้โมดูล Wi-Fi แบบบูรณาการซึ่งรองรับโหมด AP (จุดเชื่อมต่อ) ที่จำเป็นในการกระจายสัญญาณเครือข่ายฮอตสปอต หากต้องการโฮสต์ฮอตสปอตจาก Raspberry Pi โดยไม่มีโมดูล Wi-Fi ในตัว ให้ระบุอินเทอร์เฟซที่สอดคล้องกับอะแดปเตอร์ USB ที่รองรับโหมด AP

เมื่อคุณสร้างเครือข่ายฮอตสปอตแล้ว ฮอตสปอตของคุณจะทำงานโดยอัตโนมัติ

ขั้นตอนต่อไปคือการเชื่อมต่อกับฮอตสปอต Wi-Fi จากคอมพิวเตอร์ปกติของคุณ ค้นหาเครือข่ายที่มี SSID ตรงกับชื่อฮอตสปอตที่คุณเลือกในขั้นตอนก่อนหน้า ใช้รหัสผ่านที่คุณให้ไว้ในขั้นตอนนั้นเพื่อยืนยันตัวตน

จากนั้นเชื่อมต่อกับ Raspberry Pi ของคุณโดยใช้ SSH:

$ ssh <username>@pi-hotspot.local

และรันคำสั่งต่อไปนี้เพื่อดูการเชื่อมต่อปัจจุบันของคุณ:

$ nmcli connection

คุณควรเห็นผลลัพธ์ที่คล้ายกับต่อไปนี้:

NAME       UUID                                  TYPE      DEVICE
Hotspot    69d77a03-1cd1-4ec7-bd78-2eb6cd5f1386  wifi      wlan0
lo         f0209dd9-8416-40a0-971d-860d3ff3501b  loopback  lo
Ethernet   4c8098c7-9f7d-4e3e-a27a-70d54235ec9a  ethernet  --
Example 1  f0c4fbcc-ac88-4791-98c2-e75685c70e9f  wifi      --
Example 2  9c6098a7-ac88-40a0-5ac2-b75695c70e9e  wifi      --

การเชื่อมต่อที่ชื่อ Hotspot แสดงถึงเครือข่าย Hotspot ใหม่ของคุณ การเชื่อมต่อตัวอย่างที่ 1 และตัวอย่างที่ 2 ข้างต้นแสดงถึงการเชื่อมต่อ Wi-Fi ที่บันทึกไว้แต่ไม่ทำงาน

กำหนดค่าเครือข่ายฮอตสปอต

กำหนดค่าเครือข่ายฮอตสปอตของคุณให้ออกอากาศอัตโนมัติทุกครั้งที่ Raspberry Pi ของคุณบูต เมื่อ Raspberry Pi ของคุณบูต มันจะเริ่มการเชื่อมต่อใดๆ ที่มีการเปิดใช้งานการเชื่อมต่ออัตโนมัติด้วยลำดับความสำคัญสูงสุด เพื่อให้แน่ใจว่าฮอตสปอตของคุณจะเริ่มทำงานทุกครั้งที่บูต เราจะเปิดใช้งานการเชื่อมต่ออัตโนมัติสำหรับฮอตสปอตและกำหนดค่าให้มีความสำคัญสูงกว่าการเชื่อมต่ออื่นๆ

เรียกใช้คำสั่งการเชื่อมต่อ nmcli ด้านบนอีกครั้งและคัดลอก UUID สำหรับเครือข่ายฮอตสปอตของคุณจากตาราง จากนั้นรันคำสั่งต่อไปนี้เพื่อดูคุณสมบัติการเชื่อมต่อสำหรับเครือข่ายฮอตสปอตของคุณโดยแทนที่ตัวแทน <hotspot UUID> ด้วย UUID สำหรับฮอตสปอตของคุณ:

$ nmcli connection show <hotspot UUID>

ผลลัพธ์จะประกอบด้วยคุณสมบัติหลายประการที่อธิบายเครือข่ายฮอตสปอตของคุณ แต่อย่างไรก็ตาม ในขณะนี้เราสนใจเพียงสองคุณสมบัติต่อไปนี้เท่านั้น:

connection.autoconnect:                 no
connection.autoconnect-priority:        0

เรียกใช้คำสั่งต่อไปนี้เพื่อเปลี่ยนลำดับความสำคัญและคุณสมบัติเชื่อมต่ออัตโนมัติสำหรับฮอตสปอตของคุณโดยแทนที่ตัวแทน <hotspot UUID> ด้วย UUID สำหรับฮอตสปอตที่คุณคัดลอกไปยังคลิปบอร์ดก่อนหน้านี้:

$ sudo nmcli connection modify <hotspot UUID> connection.autoconnect yes connection.autoconnect-priority 100

หากดำเนินการคำสั่งของคุณสำเร็จ เราควรเห็นค่าใหม่ต่อไปนี้สำหรับคุณสมบัติเหล่านั้นเมื่อเราเรียกใช้ nmcli connection show <hotspot UUID> อีกครั้ง:

connection.autoconnect:                 yes
connection.autoconnect-priority:        100

การกำหนดค่าพอร์ต

ต่อไปเราจะมาตั้งค่าเว็บไซต์พอร์ทัลที่ช่วยให้คุณเชื่อมต่อ Raspberry Pi กับเครือข่าย Wi-Fi ของโรงแรมจากเบราว์เซอร์ได้อย่างง่ายดาย

ติดตั้งเครื่องมือดังต่อไปนี้:

$ sudo apt install python3-flask

จากนั้นรันคำสั่งต่อไปนี้เพื่อสร้างไดเร็กทอรีที่เราสามารถสร้างพอร์ทัลที่เรียกว่า wifi-portal:

$ mkdir ~/wifi-portal

จากนั้นไปที่ไดเร็กทอรีพอร์ทัล:

$ cd ~/wifi-portal

เปิด app.py ในโฟลเดอร์พอร์ทัลซึ่งประกอบด้วยลอจิกสำหรับไซต์พอร์ทัล:

$ sudo nano app.py

คัดลอกและวางโค้ดต่อไปนี้ลงใน app.py:

from flask import Flask,request
import subprocess

app = Flask(__name__)

wifi_device = "wlan1"

@app.route('/')
def index():
    result = subprocess.check_output(["nmcli", "--colors", "no", "-m", "multiline", "--get-value", "SSID", "dev", "wifi", "list", "ifname", wifi_device])
    ssids_list = result.decode().split('\n')
    dropdowndisplay = f"""
        <!DOCTYPE html>
        <html>
        <head>
            <title>Wifi Control</title>
        </head>
        <body>
            <h1>Wifi Control</h1>
            <form action="/submit" method="post">
                <label for="ssid">Choose a WiFi network:</label>
                <select name="ssid" id="ssid">
        """
    for ssid in ssids_list:
        only_ssid = ssid.removeprefix("SSID:")
        if len(only_ssid) > 0:
            dropdowndisplay += f"""
                    <option value="{only_ssid}">{only_ssid}</option>
            """
    dropdowndisplay += f"""
                </select>
                <p/>
                <label for="password">Password: <input type="password" name="password"/></label>
                <p/>
                <input type="submit" value="Connect">
            </form>
        </body>
        </html>
        """
    return dropdowndisplay


@app.route('/submit',methods=['POST'])
def submit():
    if request.method == 'POST':
        print(*list(request.form.keys()), sep = ", ")
        ssid = request.form['ssid']
        password = request.form['password']
        connection_command = ["nmcli", "--colors", "no", "device", "wifi", "connect", ssid, "ifname", wifi_device]
        if len(password) > 0:
          connection_command.append("password")
          connection_command.append(password)
        result = subprocess.run(connection_command, capture_output=True)
        if result.stderr:
            return "Error: failed to connect to wifi network: <i>%s</i>" % result.stderr.decode()
        elif result.stdout:
            return "Success: <i>%s</i>" % result.stdout.decode()
        return "Error: failed to connect."


if __name__ == '__main__':
    app.run(debug=True, host='0.0.0.0', port=80)

กด Ctrl+X จากนั้นกด Y และกด Enter เพื่อบันทึกไฟล์ที่แก้ไขใน nano

ขั้นตอนต่อไปคือการกำหนดค่า Raspberry Pi ของคุณให้รันเกตเวย์ Wi-Fi โดยอัตโนมัติหลังจากบูตเครื่อง เรียกใช้คำสั่งต่อไปนี้เพื่อเปิดแท็บ cron ซึ่งเป็นเครื่องมือจัดกำหนดการของ Linux:

$ crontab -e

ป้อน 1 เพื่อใช้ตัวแก้ไขข้อความนาโนในการแก้ไขกำหนดการ cron ของคุณ จากนั้นเพิ่มบรรทัดต่อไปนี้ลงในไฟล์ โดยแทนที่ <ชื่อผู้ใช้> ด้วยชื่อผู้ใช้บัญชีผู้ดูแลระบบ Raspberry Pi ของคุณ:

@reboot sudo python3 /home/<username>/wifi-portal/app.py

กด Ctrl+X จากนั้นกด Y และกด Enter เพื่อบันทึกไฟล์ที่แก้ไขใน nano

และป้อนคำสั่งต่อไปนี้เพื่อรีบูต Raspberry Pi ของคุณ:

$ sudo reboot

ตอนนี้คุณพร้อมที่จะเชื่อมต่อกับเครือข่าย Wi-Fi ของโรงแรมใดๆ แล้ว!

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse varius enim in eros elementum tristique. Duis cursus, mi quis viverra ornare, eros dolor interdum nulla, ut commodo diam libero vitae erat. Aenean faucibus nibh et justo cursus id rutrum lorem imperdiet. Nunc ut sem vitae risus tristique posuere.

โฮสต์จุดเชื่อมต่อ Wi-Fi ด้วย Raspberry Pi

โฮสต์จุดเชื่อมต่อ Wi-Fi ด้วย Raspberry Pi

บทช่วยสอนนี้จะอธิบายการโฮสต์ฮอตสปอตจากเครือข่าย Wi-Fi ของโรงแรมหรือการเชื่อมต่อเครือข่าย Wi-Fi สาธารณะใดๆ

Lorem ipsum dolor amet consectetur adipiscing elit tortor massa arcu non.

คู่มือนี้จะอธิบายวิธีการโฮสต์ฮอตสปอตจากการเชื่อมต่อเครือข่าย Wi-Fi ของโรงแรม แต่กระบวนการเดียวกันนี้สามารถนำไปใช้กับเครือข่าย Wi-Fi สาธารณะใดๆ ที่ใช้พอร์ทัลแบบแคปทีฟ รวมถึงเครือข่ายสำหรับแขกในสนามบิน วิทยาเขตวิทยาลัย และร้านกาแฟ

เราจะเริ่มต้นด้วยการตั้งค่าฮอตสปอตที่บ้าน หากต้องการใช้ฮอตสปอตขณะที่คุณอยู่ที่โรงแรม โปรดดู การใช้ฮอตสปอ ต

กระสุนปืน

  • ราสเบอร์รี่พาย
  • แหล่งจ่ายไฟที่เหมาะสมสำหรับ Raspberry Pi (ดู รายละเอียดในเอกสารประกอบแหล่งจ่ายไฟ )
  • การ์ด MicroSD (ดู รายละเอียดในเอกสารการ์ด SD  )
  • อะแดปเตอร์สำหรับเชื่อมต่อการ์ด microSD ของคุณกับคอมพิวเตอร์ปกติของคุณ
  • อะแดปเตอร์ USB WiFi

ในการตั้งค่าการ์ด SD ของคุณในตอนแรก คุณจะต้องมี:

  • คอมพิวเตอร์เครื่องอื่นเชื่อมต่อกับเครือข่ายของคุณ เราจะเรียกเครื่องนี้ว่าคอมพิวเตอร์ธรรมดาของคุณเพื่อแยกความแตกต่างจากคอมพิวเตอร์ Raspberry Pi ที่คุณตั้งค่าเป็น NAS

การเลือกซื้อ Raspberry Pi ให้เหมาะสม

ยิ่ง Raspberry Pi ของคุณเร็วเท่าไหร่ ประสิทธิภาพการทำงานก็จะดีมากขึ้นเท่านั้น สำหรับบทช่วยสอนนี้ เราจะใช้ Raspberry Pi 4  2GB

คุณควรเลือก Raspberry Pi ที่มีโมดูล Wi-Fi ในตัว เพราะคุณจะต้องมีอุปกรณ์ Wi-Fi สองเครื่องเพื่อโฮสต์ฮอตสปอต Wi-Fi ของโรงแรม เครื่องหนึ่งเพื่อเชื่อมต่อกับเครือข่ายของโรงแรม และอีกเครื่องหนึ่งเพื่อกระจายเครือข่ายไปยังอุปกรณ์อื่นๆ ของคุณ

เลือกอะแดปเตอร์ USB Wi-Fi ที่เหมาะสม

อะแดปเตอร์ USB Wi-Fi ส่วนใหญ่ที่รองรับไดร์เวอร์ Linux ควรใช้งานได้

ในคู่มือนี้ เราใช้อะแดปเตอร์ 2.4 GHz 802.11 b/g/n ที่รวมอยู่ในชิปเซ็ต MediaTek MT7601U

เคล็ดลับ

หากคุณเลือก Raspberry Pi ที่ไม่มีโมดูล Wi-Fi ในตัว คุณจะต้องมีอะแดปเตอร์ Wi-Fi USB สองตัว อะแดปเตอร์ Wi-Fi ของคุณอย่างน้อยหนึ่งตัวต้องรองรับโหมด AP (จุดเชื่อมต่อ) เพื่อออกอากาศเครือข่ายฮอตสปอต

กำหนดค่า Raspberry Pi ของคุณ

หากต้องการเริ่มต้น ให้ทำตามเอกสารการเริ่มต้นใช้งานเพื่อตั้งค่า Raspberry Pi ของ คุณ สำหรับระบบปฏิบัติการของคุณ ให้เลือก Raspberry Pi OS Lite (32 บิต) เพื่อรันโดยไม่ต้องใช้จอภาพ (ไม่ต้องใช้เมาส์และคีย์บอร์ด)

ในช่วงการปรับแต่งระบบปฏิบัติการ ให้แก้ไขการตั้งค่าดังต่อไปนี้:

  • ป้อนชื่อโฮสต์ที่คุณต้องการ (เราแนะนำ pi-hotspot สำหรับคู่มือนี้)
  • กรอกชื่อผู้ใช้และรหัสผ่าน ; คุณจะต้องมีข้อมูลนี้เพื่อการตรวจสอบในภายหลัง
  • ทำเครื่องหมายในช่องข้างๆ กำหนดค่า LAN ไร้สายเพื่อให้ Pi ของคุณสามารถเชื่อมต่อกับ Wi-Fi โดยอัตโนมัติ
    • กรอก SSID (ชื่อ) และรหัสผ่านเครือข่ายของคุณ คุณสามารถค้นหาข้อมูลนี้ได้ในการตั้งค่า Wi-Fi หรือบนสติกเกอร์บนเราเตอร์ของคุณ
  • ในแท็บบริการ ให้ทำเครื่องหมายในช่องข้างๆ เปิดใช้งาน SSH เพื่อให้เราสามารถเชื่อมต่อกับ Pi ได้โดยไม่ต้องใช้เมาส์และคีย์บอร์ด
    • เปิดใช้งานการตรวจสอบรหัสผ่านสำหรับการเชื่อมต่อ SSH

การตั้งค่า Raspberry Pi ของคุณ

ปิด Raspberry Pi โดยการถอดปลั๊กออกจากแหล่งจ่ายไฟ จากนั้นเชื่อมต่ออะแดปเตอร์ USB WiFi (หรืออะแดปเตอร์หลายๆ ตัว) เข้ากับ Raspberry Pi สุดท้าย ให้เปิดเครื่อง Raspberry Pi โดยเสียบปลั๊กกลับเข้ากับแหล่งจ่ายไฟ

เชื่อมต่อกับ Raspberry Pi ของคุณจากระยะไกล

SSH ช่วยให้คุณสามารถเชื่อมต่อกับ Raspberry Pi ได้จากระยะไกล โดยไม่ต้องใช้คีย์บอร์ดและเมาส์ เหมาะอย่างยิ่งหาก Raspberry Pi ของคุณอยู่ในตำแหน่งที่เข้าถึงได้ยาก เช่น ด้านหลังของจอภาพ

บันทึก

หากต้องการเชื่อมต่อผ่าน SSH เข้าสู่ Raspberry Pi คุณจะต้องใช้ชื่อโฮสต์ที่คุณตั้งค่าโดยใช้ Raspberry Pi Imager หากคุณประสบปัญหาในการเชื่อมต่อโดยใช้วิธีนี้ คุณอาจต้องการใช้ที่อยู่ IP ของ Raspberry Pi แทน สำหรับข้อมูลเพิ่มเติมเกี่ยวกับการค้นหาที่อยู่ IP และการเข้าถึง Raspberry Pi จากระยะไกล โปรดดู เอกสารการเข้าถึงระยะ ไกล

เชื่อมต่อผ่าน SSH

เปิดเซสชันเทอร์มินัลบนคอมพิวเตอร์ปกติของคุณ หากต้องการเข้าถึง Raspberry Pi ผ่าน SSH ให้รันคำสั่งต่อไปนี้โดยแทนที่ <ชื่อผู้ใช้> ด้วยชื่อผู้ใช้ที่คุณเลือกใน Imager:

$ ssh <username>@pi-hotspot.local

$ ssh <username>@pi-hotspot.local
The authenticity of host 'pi-hotspot.local (fd81:b8a1:261d:1:acd4:610c:b069:ac16)' can't be established.
ED25519 key fingerprint is SHA256:s6aWAEe8xrbPmJzhctei7/gEQitO9mj2ilXigelBm04.
This key is not known by any other names
Are you sure you want to continue connecting (yes/no/
[fingerprint])? yes
Warning: Permanently added 'pi-hotspot.local' (ED25519) to the list of known hosts.

เมื่อได้รับแจ้งให้ใส่รหัสผ่าน ให้ใช้รหัสผ่านที่คุณสร้างไว้ใน Raspberry Pi Imager

กำหนดค่าฮอตสปอต

ตอนนี้ Raspberry Pi ของคุณพร้อมใช้งานแล้ว ถึงเวลาเปลี่ยนเป็นฮอตสปอตแล้ว

ค้นหาอะแดปเตอร์ USB Wi-Fi ของคุณ

ขั้นแรกเราต้องหาอะแดปเตอร์ USB เรียกใช้คำสั่งต่อไปนี้เพื่อระบุอุปกรณ์ Wi-Fi โดยใช้ Network Manager CLI:

$ nmcli device

คุณควรเห็นผลลัพธ์ที่คล้ายกับต่อไปนี้:

DEVICE         TYPE      STATE                   CONNECTION
wlan1          wifi      connected               Example Wi-Fi
lo             loopback  connected (externally)  lo
wlan0          wifi      disconnected            --
p2p-dev-wlan0  wifi-p2p  disconnected            --
eth0           ethernet  unavailable             --

ในเอาต์พุตข้างต้น โมดูล USB Wi-Fi, wlan1 เชื่อมต่อกับเครือข่าย Wi-Fi ชื่อ "ตัวอย่าง Wi-Fi" อุปกรณ์ Wi-Fi ในตัว wlan0 ไม่ได้ใช้งานอยู่ในขณะนี้ ดังนั้นสถานะปัจจุบันจึงเป็น "ไม่ได้เชื่อมต่อ"

หาก Raspberry Pi ของคุณมีโมดูล Wi-Fi ในตัว ตามค่าเริ่มต้นจะแสดงเป็น wlan0 โมดูล Wi-Fi แรกที่คุณเชื่อมต่อจะแสดงเป็น wlan1 และอะแดปเตอร์ตัวถัดไปจะแสดงเป็น wlan2, wlan3 เป็นต้น ขึ้นอยู่กับการกำหนดค่าเฉพาะของคุณ Raspberry Pi ของคุณอาจเชื่อมต่อกับเครือข่ายโดยใช้ทั้งอะแดปเตอร์ USB หรือโมดูล Wi-Fi ในตัว

สร้างเครือข่ายฮอตสปอต

ต่อไปเราจะใช้โมดูล Wi-Fi ในตัวเพื่อกระจายสัญญาณเครือข่ายฮอตสปอต รันคำสั่งต่อไปนี้เพื่อสร้างฮอตสปอตโดยแทนที่ตัวแทน <ชื่อฮอตสปอต> และ <รหัสผ่านฮอตสปอต> ด้วยชื่อฮอตสปอตและรหัสผ่านที่คุณเลือก:

$ sudo nmcli device wifi hotspot ssid <hotspot name> password <hotspot password> ifname wlan0

เคล็ดลับ

ตัวเลือก ifname wlan0 ที่ส่วนท้ายของคำสั่งนี้ระบุว่าฮอตสปอตจะต้องใช้โมดูล Wi-Fi แบบบูรณาการซึ่งรองรับโหมด AP (จุดเชื่อมต่อ) ที่จำเป็นในการกระจายสัญญาณเครือข่ายฮอตสปอต หากต้องการโฮสต์ฮอตสปอตจาก Raspberry Pi โดยไม่มีโมดูล Wi-Fi ในตัว ให้ระบุอินเทอร์เฟซที่สอดคล้องกับอะแดปเตอร์ USB ที่รองรับโหมด AP

เมื่อคุณสร้างเครือข่ายฮอตสปอตแล้ว ฮอตสปอตของคุณจะทำงานโดยอัตโนมัติ

ขั้นตอนต่อไปคือการเชื่อมต่อกับฮอตสปอต Wi-Fi จากคอมพิวเตอร์ปกติของคุณ ค้นหาเครือข่ายที่มี SSID ตรงกับชื่อฮอตสปอตที่คุณเลือกในขั้นตอนก่อนหน้า ใช้รหัสผ่านที่คุณให้ไว้ในขั้นตอนนั้นเพื่อยืนยันตัวตน

จากนั้นเชื่อมต่อกับ Raspberry Pi ของคุณโดยใช้ SSH:

$ ssh <username>@pi-hotspot.local

และรันคำสั่งต่อไปนี้เพื่อดูการเชื่อมต่อปัจจุบันของคุณ:

$ nmcli connection

คุณควรเห็นผลลัพธ์ที่คล้ายกับต่อไปนี้:

NAME       UUID                                  TYPE      DEVICE
Hotspot    69d77a03-1cd1-4ec7-bd78-2eb6cd5f1386  wifi      wlan0
lo         f0209dd9-8416-40a0-971d-860d3ff3501b  loopback  lo
Ethernet   4c8098c7-9f7d-4e3e-a27a-70d54235ec9a  ethernet  --
Example 1  f0c4fbcc-ac88-4791-98c2-e75685c70e9f  wifi      --
Example 2  9c6098a7-ac88-40a0-5ac2-b75695c70e9e  wifi      --

การเชื่อมต่อที่ชื่อ Hotspot แสดงถึงเครือข่าย Hotspot ใหม่ของคุณ การเชื่อมต่อตัวอย่างที่ 1 และตัวอย่างที่ 2 ข้างต้นแสดงถึงการเชื่อมต่อ Wi-Fi ที่บันทึกไว้แต่ไม่ทำงาน

กำหนดค่าเครือข่ายฮอตสปอต

กำหนดค่าเครือข่ายฮอตสปอตของคุณให้ออกอากาศอัตโนมัติทุกครั้งที่ Raspberry Pi ของคุณบูต เมื่อ Raspberry Pi ของคุณบูต มันจะเริ่มการเชื่อมต่อใดๆ ที่มีการเปิดใช้งานการเชื่อมต่ออัตโนมัติด้วยลำดับความสำคัญสูงสุด เพื่อให้แน่ใจว่าฮอตสปอตของคุณจะเริ่มทำงานทุกครั้งที่บูต เราจะเปิดใช้งานการเชื่อมต่ออัตโนมัติสำหรับฮอตสปอตและกำหนดค่าให้มีความสำคัญสูงกว่าการเชื่อมต่ออื่นๆ

เรียกใช้คำสั่งการเชื่อมต่อ nmcli ด้านบนอีกครั้งและคัดลอก UUID สำหรับเครือข่ายฮอตสปอตของคุณจากตาราง จากนั้นรันคำสั่งต่อไปนี้เพื่อดูคุณสมบัติการเชื่อมต่อสำหรับเครือข่ายฮอตสปอตของคุณโดยแทนที่ตัวแทน <hotspot UUID> ด้วย UUID สำหรับฮอตสปอตของคุณ:

$ nmcli connection show <hotspot UUID>

ผลลัพธ์จะประกอบด้วยคุณสมบัติหลายประการที่อธิบายเครือข่ายฮอตสปอตของคุณ แต่อย่างไรก็ตาม ในขณะนี้เราสนใจเพียงสองคุณสมบัติต่อไปนี้เท่านั้น:

connection.autoconnect:                 no
connection.autoconnect-priority:        0

เรียกใช้คำสั่งต่อไปนี้เพื่อเปลี่ยนลำดับความสำคัญและคุณสมบัติเชื่อมต่ออัตโนมัติสำหรับฮอตสปอตของคุณโดยแทนที่ตัวแทน <hotspot UUID> ด้วย UUID สำหรับฮอตสปอตที่คุณคัดลอกไปยังคลิปบอร์ดก่อนหน้านี้:

$ sudo nmcli connection modify <hotspot UUID> connection.autoconnect yes connection.autoconnect-priority 100

หากดำเนินการคำสั่งของคุณสำเร็จ เราควรเห็นค่าใหม่ต่อไปนี้สำหรับคุณสมบัติเหล่านั้นเมื่อเราเรียกใช้ nmcli connection show <hotspot UUID> อีกครั้ง:

connection.autoconnect:                 yes
connection.autoconnect-priority:        100

การกำหนดค่าพอร์ต

ต่อไปเราจะมาตั้งค่าเว็บไซต์พอร์ทัลที่ช่วยให้คุณเชื่อมต่อ Raspberry Pi กับเครือข่าย Wi-Fi ของโรงแรมจากเบราว์เซอร์ได้อย่างง่ายดาย

ติดตั้งเครื่องมือดังต่อไปนี้:

$ sudo apt install python3-flask

จากนั้นรันคำสั่งต่อไปนี้เพื่อสร้างไดเร็กทอรีที่เราสามารถสร้างพอร์ทัลที่เรียกว่า wifi-portal:

$ mkdir ~/wifi-portal

จากนั้นไปที่ไดเร็กทอรีพอร์ทัล:

$ cd ~/wifi-portal

เปิด app.py ในโฟลเดอร์พอร์ทัลซึ่งประกอบด้วยลอจิกสำหรับไซต์พอร์ทัล:

$ sudo nano app.py

คัดลอกและวางโค้ดต่อไปนี้ลงใน app.py:

from flask import Flask,request
import subprocess

app = Flask(__name__)

wifi_device = "wlan1"

@app.route('/')
def index():
    result = subprocess.check_output(["nmcli", "--colors", "no", "-m", "multiline", "--get-value", "SSID", "dev", "wifi", "list", "ifname", wifi_device])
    ssids_list = result.decode().split('\n')
    dropdowndisplay = f"""
        <!DOCTYPE html>
        <html>
        <head>
            <title>Wifi Control</title>
        </head>
        <body>
            <h1>Wifi Control</h1>
            <form action="/submit" method="post">
                <label for="ssid">Choose a WiFi network:</label>
                <select name="ssid" id="ssid">
        """
    for ssid in ssids_list:
        only_ssid = ssid.removeprefix("SSID:")
        if len(only_ssid) > 0:
            dropdowndisplay += f"""
                    <option value="{only_ssid}">{only_ssid}</option>
            """
    dropdowndisplay += f"""
                </select>
                <p/>
                <label for="password">Password: <input type="password" name="password"/></label>
                <p/>
                <input type="submit" value="Connect">
            </form>
        </body>
        </html>
        """
    return dropdowndisplay


@app.route('/submit',methods=['POST'])
def submit():
    if request.method == 'POST':
        print(*list(request.form.keys()), sep = ", ")
        ssid = request.form['ssid']
        password = request.form['password']
        connection_command = ["nmcli", "--colors", "no", "device", "wifi", "connect", ssid, "ifname", wifi_device]
        if len(password) > 0:
          connection_command.append("password")
          connection_command.append(password)
        result = subprocess.run(connection_command, capture_output=True)
        if result.stderr:
            return "Error: failed to connect to wifi network: <i>%s</i>" % result.stderr.decode()
        elif result.stdout:
            return "Success: <i>%s</i>" % result.stdout.decode()
        return "Error: failed to connect."


if __name__ == '__main__':
    app.run(debug=True, host='0.0.0.0', port=80)

กด Ctrl+X จากนั้นกด Y และกด Enter เพื่อบันทึกไฟล์ที่แก้ไขใน nano

ขั้นตอนต่อไปคือการกำหนดค่า Raspberry Pi ของคุณให้รันเกตเวย์ Wi-Fi โดยอัตโนมัติหลังจากบูตเครื่อง เรียกใช้คำสั่งต่อไปนี้เพื่อเปิดแท็บ cron ซึ่งเป็นเครื่องมือจัดกำหนดการของ Linux:

$ crontab -e

ป้อน 1 เพื่อใช้ตัวแก้ไขข้อความนาโนในการแก้ไขกำหนดการ cron ของคุณ จากนั้นเพิ่มบรรทัดต่อไปนี้ลงในไฟล์ โดยแทนที่ <ชื่อผู้ใช้> ด้วยชื่อผู้ใช้บัญชีผู้ดูแลระบบ Raspberry Pi ของคุณ:

@reboot sudo python3 /home/<username>/wifi-portal/app.py

กด Ctrl+X จากนั้นกด Y และกด Enter เพื่อบันทึกไฟล์ที่แก้ไขใน nano

และป้อนคำสั่งต่อไปนี้เพื่อรีบูต Raspberry Pi ของคุณ:

$ sudo reboot

ตอนนี้คุณพร้อมที่จะเชื่อมต่อกับเครือข่าย Wi-Fi ของโรงแรมใดๆ แล้ว!