<?xml version="1.0"?>
<rss version="2.0">
   <channel>
      <title>Pico 與 AI by Lu Aidan</title>
      <link>https://padlet.com/gag19800328/6vv5sj7z8q7fl3o4</link>
      <description></description>
      <language>en-us</language>
      <pubDate>2024-10-20 07:06:20 UTC</pubDate>
      <lastBuildDate>2024-10-20 07:12:27 UTC</lastBuildDate>
      <webMaster>hello@padlet.com</webMaster>
      <image>
         <url></url>
      </image>
      <item>
         <title>地球保衛戰</title>
         <author>gag19800328</author>
         <link>https://padlet.com/gag19800328/6vv5sj7z8q7fl3o4/wish/3177641377</link>
         <description><![CDATA[<pre><code>Pico_Wear.py 使用說明

PicoWear 類別用於控制 Pico Wear 硬體，透過這個類別，您可以：
  1. 初始化並控制 Pico Wear 的硬體元件。
  2. 註冊並處理按鈕按下事件。
  3. 傳送訊息到 LINE Notify 服務。
  4. 連接到 MQTT 伺服器進行訊息通訊。

主要函數說明如下：
__init__(): 初始化 PicoWear 物件，設置計時器、LED、顯示螢幕、MPU6050 感測器、Wi-Fi、RTC 和 MQTT 客戶端。
init_hardware(button_callback=None): 初始化所有硬體元件，包括 OLED 顯示螢幕、MPU6050 傾斜感測器、Wi-Fi、RTC 和 LED。可選參數 button_callback 用於設置按鈕按下時的回呼函數。
detect_button(timer, callback=None): 偵測按鈕狀態，若偵測到按鈕被按下，呼叫指定的回呼函數。
register_button_callback(callback): 註冊按鈕按下時的回呼函數，替換之前的計時器回呼。
line_notify_message(token, msg): 使用 LINE Notify API 傳送訊息。參數 token 為授權令牌，msg 為傳送的訊息內容。
mqtt_connect(mqtt_broker): 連接到指定的 MQTT 伺服器。參數 mqtt_broker 為伺服器位址，成功連接後返回 MQTT 客戶端物件。 

PicoWear 示例：
from Pico_Wear import PicoWear  # 引入 PicoWear 類別
# 創建 PicoWear 物件
pico_wear = PicoWear()

# 註冊按鈕回呼函數範例
def on_button_press():
    print("按鈕被按下")
pico.register_button_callback(on_button_press)#PicoWear只有一個按鈕CallBack沒有回傳值

PicoWear.display (OLED) 的使用說明：
這是 Micropython 中一個 OLED 的驅動，解析度為 128x128 的單色螢幕，每行最多只能顯示 16 個字，超出的話要換行顯示，只能顯示英文字。
基本繪圖：
繼承 framebuf.FrameBuffer 除了原本 framebuf.FrameBuffer 的函數還包含如下：
畫點：display.pixel(x, y, color)
畫線：display.line(x1, y1, x2, y2, color)
畫矩形：display.draw_rectangle(x, y, width, height, color)
填充矩形：display.fill_rectangle(x, y, width, height, color)
畫圓：display.draw_circle(x, y, radius, color)
填充圓：display.fill_circle(x, y, radius, color)
畫三角形：display.draw_triangle(x0, y0, x1, y1, x2, y2, color)
填充三角形：display.fill_triangle(x0, y0, x1, y1, x2, y2, color)
文字顯示：
顯示文字：display.text("Hello", x, y, color)
位圖顯示：
讀取圖片：Image_fb = display.read_bmp_mono('圖片路徑名稱')
繪製位圖：display.drawBitmap(self, Image_fb, x, y)
顯示控制：
更新顯示：display.show()
清除顯示：display.fill(0) 然後 display.show()
調整對比度：display.contrast(contrast_value)
螢幕翻轉：display.rotate(flag)
反轉顯示：display.invert(invert_flag)
電源管理：
開啟顯示：display.poweron()
關閉顯示：display.poweroff()
睡眠模式：display.sleep(sleep_flag)
注意：
顏色使用 1 表示點亮，0 表示熄滅。
座標系統從左上角 (0,0) 開始。
該物件已經使用 Double Buffer 呼叫 display.show() 將緩衝顯示出來。
把畫面填充完畢再一次性顯示可以去除閃爍問題。

PicoWear.mpu使用說明
Mpu6050_mahony.py
使用 MPU6050 陀螺儀和加速度計感測器設計的。
它可以進行平躺Roll Pitch ，站立時傾斜角度的計算，並透過Mahony濾波算法來實現更準確的姿態估計。
務必每秒100計算才能取得穩定角度,請單獨一個Timer呼叫計算
mpu.update_mahony()  #如果要取得roll pitch
mpu.calculate_tilt_angle() #如果要站立Get_tilt_angle
該類別已使用雙緩衝去除角度計算競爭
注意
Timer中斷頻率高,請在主程式判斷KeyboardInterrupt時使用for timer in timers: timer.deinit(),關閉所有Timer
主要方法
__init__(self, i2c, addr=0x68)
    初始化 MPU6050 類別。
    參數 i2c 是必須的，它是一個已配置的 I2C 對象。
    參數 addr 是設備的 I2C 地址，默認為 0x68。
calibrate(self, samples=100)
    校準 MPU6050 roll pitch，減少讀數誤差。
update_mahony(self)
    計算mpu6050平躺的。更新姿態估計，使用 Mahony 濾波算法。
    這個方法會自動根據加速度計和陀螺儀的讀數更新四元數，從而得到較準確的姿態角。
    每秒需要進行100運算,運算結果使用get_angles() 取得
get_angles(self)
    獲取計算後的歐拉角（Roll, Pitch, Yaw）。角度以度（°）為單位。
read_accel(self)
    讀取加速度數據，從 MPU6050 的加速度計傳感器獲取數據。返回的加速度數據經過轉換為 g 單位（重力加速度的倍數）。
read_gyro(self)
    讀取陀螺儀數據，從 MPU6050 的陀螺儀傳感器獲取數據。返回的陀螺儀數據經過轉換為度每秒（deg/s），描述角速度。
read_accel_raw(self)
    直接讀取原始加速度數據。
calculate_tilt_angle(self)
    計算mpu6050站立之後的傾斜角度，使用互補濾波器來平滑角度變化，以應對快速動態變化。
    務必每秒100計算才能算出穩定角度。
    只有計算要取出角度請使用Get_tilt_angle()
Get_tilt_angle(self)
    取得calculate_tilt_angles計算後的tilt角度
    此方法返回tilt角度以(度)為單位，並會將角度維持在 -180° 到 180° 的範圍內。
calibrate_tilt(self, num_samples=100)
    校準站立時傾斜角度，主要用於設置加速度計的偏移值。


請幫我寫出:

    


製作一個地球保衛的遊戲
螢幕中央有一個球, 玩家是一個方塊盾
用Timer計算mpu
抓取mpu的角度，
使用Roll角度-15度～15度ㄧ對應方塊的Ｘ軸座標
使用Pitch角度-15度～15度對應方塊的Y軸座標
四面八方會有隕石向地球飛過來,左上角顯示分數，
玩家的方塊盾可以抵擋隕石 每擋一個隕石10分
如果隕石碰到地球遊戲Game Over
顯示Game Over與分數
點擊按鈕重新開始新的遊戲
請先一步一步分析再進行程式撰寫</code></pre>]]></description>
         <enclosure url="" />
         <pubDate>2024-10-20 07:09:01 UTC</pubDate>
         <guid>https://padlet.com/gag19800328/6vv5sj7z8q7fl3o4/wish/3177641377</guid>
      </item>
      <item>
         <title>Pico_Wear.py 使用說明</title>
         <author></author>
         <link>https://padlet.com/gag19800328/6vv5sj7z8q7fl3o4/wish/3177642567</link>
         <description><![CDATA[<p>PicoWear 類別用於控制 Pico Wear 硬體，透過這個類別，您可以：</p><p>  1. 初始化並控制 Pico Wear 的硬體元件。</p><p>  2. 註冊並處理按鈕按下事件。</p><p>  3. 傳送訊息到 LINE Notify 服務。</p><p>  4. 連接到 MQTT 伺服器進行訊息通訊。</p><p><br/></p><p>主要函數說明如下：</p><p>__init__(): 初始化 PicoWear 物件，設置計時器、LED、顯示螢幕、MPU6050 感測器、Wi-Fi、RTC 和 MQTT 客戶端。</p><p>init_hardware(button_callback=None): 初始化所有硬體元件，包括 OLED 顯示螢幕、MPU6050 傾斜感測器、Wi-Fi、RTC 和 LED。可選參數 button_callback 用於設置按鈕按下時的回呼函數。</p><p>detect_button(timer, callback=None): 偵測按鈕狀態，若偵測到按鈕被按下，呼叫指定的回呼函數。</p><p>register_button_callback(callback): 註冊按鈕按下時的回呼函數，替換之前的計時器回呼。</p><p>line_notify_message(token, msg): 使用 LINE Notify API 傳送訊息。參數 token 為授權令牌，msg 為傳送的訊息內容。</p><p>mqtt_connect(mqtt_broker): 連接到指定的 MQTT 伺服器。參數 mqtt_broker 為伺服器位址，成功連接後返回 MQTT 客戶端物件。 </p><p><br/></p><p>PicoWear 示例：</p><p>from Pico_Wear import PicoWear  # 引入 PicoWear 類別</p><p># 創建 PicoWear 物件</p><p>pico_wear = PicoWear()</p><p><br/></p><p># 註冊按鈕回呼函數範例</p><p>def on_button_press():</p><p>    print("按鈕被按下")</p><p>pico.register_button_callback(on_button_press)#PicoWear只有一個按鈕CallBack沒有回傳值</p><p><br/></p><p>PicoWear.display (OLED) 的使用說明：</p><p>這是 Micropython 中一個 OLED 的驅動，解析度為 128x128 的單色螢幕，每行最多只能顯示 16 個字，超出的話要換行顯示，只能顯示英文字。</p><p>基本繪圖：</p><p>繼承 framebuf.FrameBuffer 除了原本 framebuf.FrameBuffer 的函數還包含如下：</p><p>畫點：display.pixel(x, y, color)</p><p>畫線：display.line(x1, y1, x2, y2, color)</p><p>畫矩形：display.draw_rectangle(x, y, width, height, color)</p><p>填充矩形：display.fill_rectangle(x, y, width, height, color)</p><p>畫圓：display.draw_circle(x, y, radius, color)</p><p>填充圓：display.fill_circle(x, y, radius, color)</p><p>畫三角形：display.draw_triangle(x0, y0, x1, y1, x2, y2, color)</p><p>填充三角形：display.fill_triangle(x0, y0, x1, y1, x2, y2, color)</p><p>文字顯示：</p><p>顯示文字：display.text("Hello", x, y, color)</p><p>位圖顯示：</p><p>讀取圖片：Image_fb = display.read_bmp_mono('圖片路徑名稱')</p><p>繪製位圖：display.drawBitmap(self, Image_fb, x, y)</p><p>顯示控制：</p><p>更新顯示：display.show()</p><p>清除顯示：display.fill(0) 然後 display.show()</p><p>調整對比度：display.contrast(contrast_value)</p><p>螢幕翻轉：display.rotate(flag)</p><p>反轉顯示：display.invert(invert_flag)</p><p>電源管理：</p><p>開啟顯示：display.poweron()</p><p>關閉顯示：display.poweroff()</p><p>睡眠模式：display.sleep(sleep_flag)</p><p>注意：</p><p>顏色使用 1 表示點亮，0 表示熄滅。</p><p>座標系統從左上角 (0,0) 開始。</p><p>該物件已經使用 Double Buffer 呼叫 display.show() 將緩衝顯示出來。</p><p>把畫面填充完畢再一次性顯示可以去除閃爍問題。</p><p><br/></p><p>PicoWear.mpu使用說明</p><p>Mpu6050_mahony.py</p><p>使用 MPU6050 陀螺儀和加速度計感測器設計的。</p><p>它可以進行平躺Roll Pitch ，站立時傾斜角度的計算，並透過Mahony濾波算法來實現更準確的姿態估計。</p><p>務必每秒100計算才能取得穩定角度,請單獨一個Timer呼叫計算</p><p>mpu.update_mahony()  #如果要取得roll pitch</p><p>mpu.calculate_tilt_angle() #如果要站立Get_tilt_angle</p><p>該類別已使用雙緩衝去除角度計算競爭</p><p>注意</p><p>Timer中斷頻率高,請在主程式判斷KeyboardInterrupt時使用for timer in timers: timer.deinit(),關閉所有Timer</p><p>主要方法</p><p>__init__(self, i2c, addr=0x68)</p><p>    初始化 MPU6050 類別。</p><p>    參數 i2c 是必須的，它是一個已配置的 I2C 對象。</p><p>    參數 addr 是設備的 I2C 地址，默認為 0x68。</p><p>calibrate(self, samples=100)</p><p>    校準 MPU6050 roll pitch，減少讀數誤差。</p><p>update_mahony(self)</p><p>    計算mpu6050平躺的。更新姿態估計，使用 Mahony 濾波算法。</p><p>    這個方法會自動根據加速度計和陀螺儀的讀數更新四元數，從而得到較準確的姿態角。</p><p>    每秒需要進行100運算,運算結果使用get_angles() 取得</p><p>get_angles(self)</p><p>    獲取計算後的歐拉角（Roll, Pitch, Yaw）。角度以度（°）為單位。</p><p>read_accel(self)</p><p>    讀取加速度數據，從 MPU6050 的加速度計傳感器獲取數據。返回的加速度數據經過轉換為 g 單位（重力加速度的倍數）。</p><p>read_gyro(self)</p><p>    讀取陀螺儀數據，從 MPU6050 的陀螺儀傳感器獲取數據。返回的陀螺儀數據經過轉換為度每秒（deg/s），描述角速度。</p><p>read_accel_raw(self)</p><p>    直接讀取原始加速度數據。</p><p>calculate_tilt_angle(self)</p><p>    計算mpu6050站立之後的傾斜角度，使用互補濾波器來平滑角度變化，以應對快速動態變化。</p><p>    務必每秒100計算才能算出穩定角度。</p><p>    只有計算要取出角度請使用Get_tilt_angle()</p><p>Get_tilt_angle(self)</p><p>    取得calculate_tilt_angles計算後的tilt角度</p><p>    此方法返回tilt角度以(度)為單位，並會將角度維持在 -180° 到 180° 的範圍內。</p><p>calibrate_tilt(self, num_samples=100)</p><p>    校準站立時傾斜角度，主要用於設置加速度計的偏移值。</p><p><br/></p><p><br/></p><p>請幫我寫出:</p><p><br/></p><p>    </p><p><br/></p><p><br/></p><p>製作一個地球保衛的遊戲</p><p>螢幕中央有一個球, 玩家是一個方塊盾</p><p>用Timer計算mpu</p><p>抓取mpu的角度，</p><p>使用Roll角度-15度～15度ㄧ對應方塊的Ｘ軸座標</p><p>使用Pitch角度-15度～15度對應方塊的Y軸座標</p><p>四面八方會有隕石向地球飛過來,左上角顯示分數，</p><p>玩家的方塊盾可以抵擋隕石 每擋一個隕石10分</p><p>如果隕石碰到地球遊戲Game Over</p><p>顯示Game Over與分數</p><p>點擊按鈕重新開始新的遊戲</p><p>請先一步一步分析再進行程式撰寫</p>]]></description>
         <enclosure url="" />
         <pubDate>2024-10-20 07:12:00 UTC</pubDate>
         <guid>https://padlet.com/gag19800328/6vv5sj7z8q7fl3o4/wish/3177642567</guid>
      </item>
   </channel>
</rss>
