# Arduino筆記-9 **注意!此部分需要用到Python和Discord Bot,第一次使用可以到[這裡](https://hackmd.io/@AndrewCho365/S1yXoFC8C)查看Thonny IDE教學**以及[這裡](https://hackmd.io/@AndrewCho365/rJo8Vq08C)查看Discord Bot教學 ## 學習內容 1. 介紹pyserial函式庫 2. 使用pyserial連接DHT11 3. 使用pyserial連接SG90、全彩LED ## 介紹pyserial函式庫 pyserial是一個可以和Python達成序列埠通訊的函式庫 可以像使用Arduino IDE 的序列埠監控窗一樣進行輸入與輸出 因為Arduino不方便進行聯網, 所以可以使pyserial函式庫進行物聯網。 首先,按照前面[IDE教學](https://hackmd.io/@AndrewCho365/S1yXoFC8C)安裝**pyserial**函式庫 或是在cmd輸入下方指令⬇️ ``` pip install pyserial ``` 安裝完後在第一行輸入下方程式導入模組。 ```py= import serial ``` 接著是一些設定(連接埠、波特率) 連接埠可以在裝置管理員找到。波特率則要設置的和開發板一樣。 ```py= COM_PORT = "COM3" # 請根據您的連接埠更改此處 BAUD_RATE = 9600 # Arduino的Serial.begin()設定的波特率 ser = serial.Serial(COM_PORT, BAUD_RATE) ``` 接下來就是接收和輸出資訊 ### 輸出⬇️ ```py= ser.write(message.encode()) # 將字符串編碼為位元組 ``` ### 接收⬇️ ```py= data = ser.readline().decode().strip() print(data) ``` 這行代碼包含了三個主要的操作,我將逐一解釋它們的用途: 1. `.readline()`: 這個函數從串口讀取一行數據直到遇到換行符號。 2. `.decode()`: 由於從串口讀取的數據是以位元組(byte)形式存在的, `decode()` 函數將這些位元組數據轉換成字符串(str), 這樣能夠以人類可讀的文本格式處理數據。 3. `.strip()`: 這個函數用於移除字符串兩端的空白字符(包括空格、換行符號等), 這通常用於清理數據,確保在進一步處理之前不會有不必要的空白或特殊字符。 接下來進行的是pyserial的實作, 會需要用的前面的Discord bot進行物聯網操作,所以沒看過教學的記得回去看。 ## 使用pyserial連接DHT11 首先需要按照溫濕度感測器的教學處理好接線和上傳程式 接著進行程式編寫, 因為溫濕度感測器只會輸出資料, 所以只需要用到接收的部分。 最後打入以下程式碼⬇️ ```py= import discord import serial bot = discord.Bot(intents = discord.Intents.all()) COM_PORT = "COM3" BAUD_RATE = 9600 ser = serial.Serial(COM_PORT, BAUD_RATE) @bot.event async def on_ready(): print(f"「{bot.user}」已登入") @bot.slash_command(description="查詢溫濕度") async def th(ctx): data = ser.readline().decode().strip() await ctx.respond("data") bot.run("bot_token") ``` 將開發板與電腦連接後, 打開Discord 使用指令, 接著就會收到溫度與濕度的資料了。 ## 使用pyserial連接SG90、全彩LED 首先需要按照伺服馬達和全彩LED的教學處理好接線和上傳程式 接著進行程式編寫, 因為伺服馬達和全彩LED都只會接收資料, 所以只需要用到輸出的部分。 底下的程式碼包含伺服馬達和全彩LED, 接著將需要的部分打入⬇️ ```py= import discord import serial bot = discord.Bot(intents = discord.Intents.all()) COM_PORT = "COM3" BAUD_RATE = 9600 ser = serial.Serial(COM_PORT, BAUD_RATE) @bot.event async def on_ready(): print(f"「{bot.user}」已登入") @bot.slash_command(description="控制全彩LED") async def set_led(ctx,r: int,g: int,b: int): light = f'{r} {g} {b}' ser.write(str.encode(str(light))) await ctx.respond(light) @bot.slash_command(description="控制伺服馬達") async def set_angle(ctx,angle: int): if 0 <= angle <= 180: ser.write(str.encode(str(angle))) await ctx.respond(f"伺服馬達已轉到 {angle} 度") else: await ctx.respond("請輸入 0 到 180 的角度") bot.run("bot_token") ``` 將開發板與電腦連接後, 打開Discord 使用指令, 接著就可以控制伺服馬達和全彩LED。
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up