เรียกใช้เว็บเซิร์ฟเวอร์ LWIP บน Pico W โดยใช้คลาส C ++ PICO_W_CONNECTION_MANAGER และอินเตอร์เฟสบรรทัดคำสั่งเพื่อจัดการการเชื่อมต่อกับ AP
โปรแกรม CLI ช่วยให้คุณสแกนสำหรับ SSID จัดการเชื่อมต่อและตัดการเชื่อมต่ออ่าน RSSI และจัดเก็บข้อมูล SSID ในโปรแกรม Pico W Flash โดยใช้ระบบไฟล์ LittleFs
ซอร์สโค้ดได้รับการออกแบบเพื่อให้คุณสามารถใช้คลาส Pico_w_connection_manager กับส่วนต่อประสานผู้ใช้ของคุณเอง ใช้คลาส Pico_w_connection_manager_cli เป็นคู่มือ รหัสถือว่า "ซูเปอร์ลูป" และไม่ได้ใช้ RTOS
เมื่อการเชื่อมต่อกับ AP เปิดใช้งานโปรแกรมสาธิตจะเริ่มเว็บเซิร์ฟเวอร์ที่ช่วยให้คุณเปิดหรือปิด LED บนบอร์ดของ Pico W โปรแกรมแสดงให้เห็นถึงหน้าเว็บที่ใช้ SSI และ CGI เพื่อสลับ LED และหน้าสองที่ใช้ Ajax เพื่อทำสิ่งเดียวกัน

โปรแกรมสาธิตใช้คอนโซลพอร์ตอนุกรมเพื่อรับอินพุตของผู้ใช้และการพิมพ์เอาต์พุต พิมพ์ help ที่พรอมต์คำสั่งสำหรับรายการคำสั่ง คำสั่งทั้งหมดสำหรับการจัดการการเชื่อมต่อ Wi-Fi นั้นเป็นแบบฟอร์ม wifi- คำสั่งอื่น ๆ สำหรับการจัดการระบบไฟล์แฟลช Littlefs
โปรแกรมสาธิตใช้คอนโซลพอร์ตอนุกรม UART คุณจะต้องแก้ไข CMakeLists.txt หากคุณต้องการใช้พอร์ต MicroUSB ของ PICO-W เป็นคอนโซลพอร์ตอนุกรม ดูความคิดเห็นใน CMakeLists.txt
pico-w-wifi-setup demo
Cli is running.
Type "help" for a list of commands
Use backspace and tab to remove chars and autocomplete
Use up and down arrows to recall previous commands
> new country code XX=Worldwide
new country code XX=Worldwide
Version: 7.95.49 (2271bb6 CY) CRC: b7a28ef3 Date: Mon 2021-11-29 22:50:27 PST U0
cyw43 loaded ok, mac 28:cd:c1:06:3d:29
API: 12.2
Data: RaspberryPi.PicoW
Compiler: 1.29.4
ClmImport: 1.47.1
Customization: v5 22/06/24
Creation: 2022-06-24 06:55:08
No SSID specified
failed to connect to
wifi-scan-connect และทำตามพรอมต์เพื่อเชื่อมต่อ หาก AP ของคุณมี SSID ที่ซ่อนอยู่ให้ใช้คำสั่ง wifi-connect เพื่อเชื่อมต่อLink Up IP address= ข้อความ ป้อนที่อยู่ IP นั้นในเบราว์เซอร์ของคุณเพื่อแสดงหน้าแรกของเว็บเซิร์ฟเวอร์เมื่อคุณสลับสวิตช์จะมีความล่าช้าที่รับรู้ได้เนื่องจากการโหลดหน้าทั้งหมดสำหรับคำขอ CGI แต่ละรายการ
นอกเหนือจากการพึ่งพาใน Pico C/C ++ SDK แล้วคลาส PICO_W_CONNECTION_MANAGER ใช้รหัสภายนอกต่อไปนี้:
parson JSON เพื่อทำให้เป็นอนุกรมและ deserialize การตั้งค่าเป็นรูปแบบ JSONLittleFs เพื่อจัดเก็บการตั้งค่า Wi-Fi ในรูปแบบ JSON เป็นแฟลชโปรแกรม Pico Board จำนวนเล็กน้อยLwIP สำหรับสแต็ก TCP/IPโปรแกรมสาธิตใช้รหัสภายนอกต่อไปนี้:
EmbeddedCli สำหรับการใช้งาน CLI หลักgetsn() สำหรับการป้อนข้อมูลของผู้ใช้และสตริงเพื่อตอบสนองต่อพรอมต์perl เพื่อแปลงไฟล์ index.html ไปยังไฟล์ my_fsdata.cดูซอร์สโค้ดสำหรับรายละเอียดเพิ่มเติม
ตรวจสอบให้แน่ใจว่าคุณได้ติดตั้ง pico-sdk และใช้งานได้ ดำเนินการคำสั่งต่อไปนี้ คำสั่งด้านล่างสมมติว่า pico-sdk ถูกเก็บไว้ใน ${PICO_SDK_PATH} และคุณต้องการไดเรกทอรี pico-w-connection-manager-demo ที่ระดับไดเรกทอรีเดียวกับ pico-sdk
export PICO_BOARD=pico_w
cd ${PICO_SDK_PATH}/..
git clone https://github.com/rppicomidi/pico-w-connection-manager-demo.git
cd pico-w-connection-manager-demo
git submodule update --recursive --init
mkdir build
cd build
cmake ..
make
โหลดภาพที่สร้างขึ้นลงใน pico-w ของคุณ หากคุณพบปัญหาระหว่างการทดสอบให้ใช้แพตช์ใด ๆ ที่อธิบายไว้ในส่วนปัญหาที่รู้จักและสร้างใหม่
สำหรับปัญหาที่ทราบทั้งหมดให้ตรวจสอบวันที่ เมื่อคุณสร้างสิ่งนี้พวกเขาอาจได้รับการแก้ไข
หากคุณเรียก initialize() หลังจากที่คุณเรียก deinitialize() แล้วซอฟต์แวร์จะวางสาย นี่เป็นปัญหาของ pico-sdk ในการแก้ไขปัญหานี้ให้ใช้สาขา development pico-sdk และแพตช์ต่อการสนทนาใน SDK ปัญหา #980:
cd ${PICO_SDK_PATH}
git fetch origin
git checkout -b develop origin/develop
git submodule update lib/cyw43-driver/
แก้ไขไฟล์ 'pico-sdk/src/rp2_common/pico_cyw43_arch/cyw43_arch_threadsafe_background.c` แทนที่รหัสใกล้บรรทัด 194
#if CYW43_LWIP
lwip_init();
#endif
กับ
#if CYW43_LWIP
static bool done_lwip_init;
if (!done_lwip_init) {
lwip_init();
done_lwip_init = true;
}
#endif
หน้าเว็บที่เว็บเซิร์ฟเวอร์ให้บริการจะถูกเก็บไว้ในไดเรกทอรี fsdata/fs หากคุณเปลี่ยนไฟล์หน้าเว็บหรือ CSS ใด ๆ คุณจะต้องดำเนินการ cmake อีกครั้งเพื่อสร้างไฟล์ FSDATA/FSDATA.C ที่เข้ารหัสหน้าสำหรับแอป LWIP HTTPD และเรียกใช้ make clean ก่อน make ระบบบิลด์ควรทำสิ่งนี้โดยอัตโนมัติ แต่ไม่ใช่เพราะฉันยังไม่ได้ทำวิธีการที่จะทำให้การพึ่งพาถูกต้อง
Demo Prgram ได้รับการออกแบบมาเพื่อออกกำลังกายคุณลักษณะของคลาส pico-w-connection-manager ซึ่งเรียกว่า "คลาส" ด้านล่าง
คำสั่ง: wifi-country และ wifi-initialize
คำสั่ง: wifi-deinitialize
คำสั่ง wifi-scan-connect
คำสั่ง: wifi-connect
คำสั่ง: wifi-autoconnect
หมายเหตุ: โปรแกรมสาธิตจะทำงานเทียบเท่าคำสั่งนี้โดยอัตโนมัติเมื่อเริ่มต้น
คำสั่ง: wifi-disconnect
คำสั่ง: ไม่มี; PICO-W จะทำสิ่งนี้โดยอัตโนมัติ ในการยกเลิกพฤติกรรมนี้คุณจะต้องใช้ wifi-deinitialize หรือ wifi-disconnect อย่างชัดเจนหลังจากการสูญเสียลิงก์