STM32 ETHERNET #6.2 HTTP WEBSERVER CGI

  • 9 Replies
  • 184 Views
*

Offline tha

  • *****
  • 3534
    • View Profile
STM32 ETHERNET #6.2 HTTP WEBSERVER CGI
« on: March 18, 2022, 05:42:03 am »
https://controllerstech.com/stm32-ethernet-6-2-http-webserver-cgi/

STM32 ETHERNET #6.1 HTTP WEBSERVER CGI

นี่เป็นบทช่วยสอนอีกบทหนึ่งใน the STM32 ETHERNET series, และวันนี้เราจะมาดูวิธีใช้ the CGI (Common Gateway Interface) เพื่อรับ the data จาก the HTTP webserver. บทช่วยสอนนี้มีความต่อเนื่องมาจากบทที่แล้ว ดังนั้นโปรดตรวจสอบ the HTTP webserver Simple ก่อนดำเนินการต่อ เนื่องจากฉันจะทำการเปลี่ยนแปลงเพียงเล็กน้อยในโค้ดก่อนหน้าแทนที่จะสร้าง project ใหม่ที่นี่.

พิจารณาว่าคุณมีโปรเจ็กต์ก่อนหน้านี้ที่ทำงานได้แล้ว ฉันจะดำเนินการด้วย CGI ต่อไป

CGI (Common Gateway Interface) ถูกใช้อย่างปกติเพื่อรับบาง data จาก the webserver. ตัวอย่างเช่น, เราสามารถรับ the information ที่ป้อนเข้าใน a form, หรือใช้ the button บน the server เพื่อควบคุม the LED บน the MCU. นี่คือสิ่งที่เราจะเห็นใน tutorial ของวันนี้.

มาเริ่มกันด้วย the cube MX เปลี่ยนที่เราจำเป็นต้องทำ.

*

Offline tha

  • *****
  • 3534
    • View Profile
Re: STM32 ETHERNET #6.2 HTTP WEBSERVER CGI
« Reply #1 on: March 20, 2022, 06:14:10 am »
                                                          CubeMX Configuration

(ดูรูปภาพในลิ้งค์เอานะครับ)

ใน the setup ข้างบน, ผมแค่เปิดการใช้งาน(enable) the CGI (old style) ใน the HTTPD setup. ส่วนที่เหลือของ the configuration เป็นอย่างเดียวกับ the previous tutorial.

ตอนนี้เราต้องทำตามขั้นตอนเดียวกันกับที่กล่าวใน the previous tutorial, แค่มีการแก้ไขเล็กน้อย.

*

Offline tha

  • *****
  • 3534
    • View Profile
Re: STM32 ETHERNET #6.2 HTTP WEBSERVER CGI
« Reply #2 on: March 20, 2022, 06:21:45 am »
                                                               The additional Setup

หลังจากการสร้าง the project, ถ้าคุณ build มันเป็นครั้งแรก, คุณจะได้รับข้อผิดพลาด ดังนั้น ส่วนนี้จะครอบคลุมถึงการตั้งค่าเพิ่มเติมที่เราต้องทำเพื่อลบข้อผิดพลาดเหล่านั้น

ก่อนอื่นให้ไปที่ LWIP->Target->lwipopts.h และเปลี่ยน the #define HTTPD_USE_CUSTOM_FSDATA 0

(ดูรูปภาพในลิ้งค์เอานะครับ)

*

Offline tha

  • *****
  • 3534
    • View Profile
Re: STM32 ETHERNET #6.2 HTTP WEBSERVER CGI
« Reply #3 on: March 20, 2022, 09:35:40 am »
ตอนนี้ เราต้องรวม (include) ไฟล์ “FsData.c” พร้อมกับทรัพยากรที่เราจะใช้สำหรับเว็บเซิร์ฟเวอร์

เราได้กล่าวถึงครั้งสุดท้ายนี้แล้วและภายในโฟลเดอร์  the Project\Middlewares\Third_Party\LwIP\src\apps\http, คุณมี  the files ที่แสดงข้างล่างแล้ว.

(ดูรูปภาพในลิ้งค์เอานะครับ)

*

Offline tha

  • *****
  • 3534
    • View Profile
Re: STM32 ETHERNET #6.2 HTTP WEBSERVER CGI
« Reply #4 on: March 20, 2022, 10:02:18 am »
ก่อนที่เราจะดำเนินการต่อและสร้างไฟล์ fsdata.c เราต้องสร้างหน้าเว็บสำหรับ the CGI.

ในบทช่วยสอนนี้ ฉันจะใช้ the form เพื่อรวบรวมชื่อและนามสกุลของบุคคล หลังจากนั้น ข้อมูลนี้จะถูกส่งผ่านไปยัง MCU ซึ่งเราจะสามารถใช้งานได้.

(ดูโปรแกรมในลิ้งค์เอานะครับ)

     •  ที่นี่ฉันได้สร้าง a form, ซึ่งมี 2 parameters คือ fname และ lname.

     •  data ใดก็ตามที่เราป้อนในพารามิเตอร์เหล่านี้จะถูกส่งต่อเป็นค่าของพวกมัน

     •  เมื่อเราได้รับ data ใน MCU แล้ว เราก็สามารถตรวจสอบพารามิเตอร์และดึงค่าของพารามิเตอร์นั้นมาประมวลผลต่อไปได้

     •  โปรดทราบว่าการดำเนินการถูกตั้งค่าให้เรียก form.cgi

*

Offline tha

  • *****
  • 3534
    • View Profile
Re: STM32 ETHERNET #6.2 HTTP WEBSERVER CGI
« Reply #5 on: March 20, 2022, 10:23:35 am »
หลังจากเซฟไฟล์ในรูปแบบ .html เราจำเป็นต้องก๊อปปี้มันไปยังโฟลเดอร์ fs

(ดูรูปภาพในลิ้งค์เอานะครับ)

ตอนนี้ได้เวลาสร้าง fsdata.c แล้ว และในการทำเช่นนั้น เราจะดับเบิลคลิกที่ makeFSdata เหมือนกับที่เราทำในบทช่วยสอนก่อนหน้านี้

นี่คือการตั้งค่า หากคุณ build โค้ดตอนนี้ ข้อผิดพลาดทั้งหมดจะหายไป

ตอนนี้เราจะเขียน the code สำหรับการเริ่มต้นของ the webserver.

*

Offline tha

  • *****
  • 3534
    • View Profile
Re: STM32 ETHERNET #6.2 HTTP WEBSERVER CGI
« Reply #6 on: March 20, 2022, 02:36:22 pm »
                                                        Some Insight into the CODE

Initialization Function

(ดูโปรแกรมในลิ้งค์เอานะครับ)

ที่นี่ เราจะเริ่มต้น the HTTPD ก่อน, เช่นเดียวกับที่เราทำในบทช่วยสอนก่อนหน้านี้. The SSI initialization ถูกรวมอยู่จากบทช่วยสอนก่อนหน้าด้วย แต่ไม่จำเป็นสำหรับ CGI.

CGI Handler รับ 2 parameters:

     •  The first parameter คือ the pointer ไปยัง the tCGI Structure ที่กำหนด the base filename (URL) ของ a CGI และ
         ฟังชั่นที่เกี่ยวข้องซึ่งจะถูกเรียกเมื่อ URL นั้นถูกร้องขอ

     •  The second parameter คือจำนวนของ CGI handler ที่เรากำลังใช้ใน code ของเรา.

*

Offline tha

  • *****
  • 3534
    • View Profile
Re: STM32 ETHERNET #6.2 HTTP WEBSERVER CGI
« Reply #7 on: March 21, 2022, 05:51:55 am »
CGI HANDLER

(ดูโปรแกรมในลิ้งค์เอานะครับ)

CGI handler รับ 4 parameters

     •  iIndex จัดเตรียมให้มีดัชนีของ CGI ภายในอาร์เรย์ cgis ที่ส่งผ่านไปยัง http_set_cgi_handlers พารามิเตอร์นี้จะมีประโยชน์หาก
         คุณใช้ CGI handlers มากกว่า 1 ตัว

     •  iNumParams ให้ดัชนีของพารามิเตอร์ภายในหนึ่ง handler ตัวอย่างเช่น พารามิเตอร์นี้จะเป็น 0 สำหรับ fname และ 1 สำหรับ
         lname

     •  pcParam บรรจุชื่อของพารามิเตอร์และ pcValue บรรจุค่าของพารามิเตอร์นั้น

     •  ฟังก์ชันควรส่งคืนกลับตัวชี้ไปยัง a character string ซึ่งเป็นเส้นทางและชื่อไฟล์ของการตอบกลับที่จะถูกส่งไปยังเบราว์เซอร์ที่เชื่อมต่อ
         ตัวอย่างเช่น "/cgiform.html" หรือ "/response/error.ssi"

     •  หลังจากที่เราได้รับ the data จากเซิฟเวอร์แล้วเราจะเก็บเอาไว้ใน buffer (name) ของเรา the data จะถูกเก็บเป็น “fname
         lname