顯示具有 ChatGPT 標籤的文章。 顯示所有文章
顯示具有 ChatGPT 標籤的文章。 顯示所有文章

2025年5月12日 星期一

用ChatGPT來產生田蛙在斗南交易情形並以EXCEL資料和圖表儲存

 


程式碼:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
import requests
import json
from openpyxl import Workbook
from openpyxl.chart import BarChart, Reference
from openpyxl.utils import get_column_letter

# 從URL取得JSON資料
r = requests.get('https://data.moa.gov.tw/Service/OpenData/FromM/AquaticTransData.aspx')
json_data = json.loads(r.text)

# 建立Workbook
wb = Workbook()
ws = wb.active
ws.title = "斗南田蛙交易"

# 寫入標題行
headers = ['交易日期', '品種代碼', '魚貨名稱', '市場名稱', '交易量', '平均價']
ws.append(headers)

# 過濾出「斗南」市場的「田蛙」資料
for item in json_data:
    if '田蛙' in item['魚貨名稱'] and '斗南' in item['市場名稱']:
        row = [
            item.get('交易日期'),
            item.get('品種代碼'),
            item.get('魚貨名稱'),
            item.get('市場名稱'),
            float(item.get('交易量', 0)),
            float(item.get('平均價', 0))
        ]
        ws.append(row)

# 取得資料列數
data_rows = ws.max_row

# 建立長條圖(交易量)
chart = BarChart()
chart.title = "田蛙在斗南市場之交易量"
chart.x_axis.title = "交易日期"
chart.y_axis.title = "交易量"

# 設定圖表資料範圍(x軸是日期,y軸是交易量)
data = Reference(ws, min_col=5, min_row=1, max_row=data_rows)  # 交易量資料
categories = Reference(ws, min_col=1, min_row=2, max_row=data_rows)  # 交易日期

chart.add_data(data, titles_from_data=True)
chart.set_categories(categories)

# 插入圖表到工作表
ws.add_chart(chart, "H2")

# 儲存檔案
wb.save("DouNan_TianWa_Chart.xlsx")
print("已完成:含圖表的 Excel 已儲存為 DouNan_TianWa_Chart.xlsx")

執行結果如文章一開始顯示的圖表。

2025年5月10日 星期六

讓ChatGPT產生樞紐分析表來分析漁貨交易資料

原始漁貨交易檔案來源是執行"條件過濾漁產品交易的資料儲存到EXCEL檔案中"。
ChatGPT產生的程式:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
import pandas as pd

# 讀取原始 Excel 檔案
file_path = "AquaticTransData.xlsx"
df = pd.read_excel(file_path)

# 建立樞紐分析表:以市場名稱與魚貨名稱為索引,統計交易量總和與平均價平均
pivot_table = pd.pivot_table(
    df,
    index=['市場名稱', '魚貨名稱'],
    values=['交易量', '平均價'],
    aggfunc={'交易量': 'sum', '平均價': 'mean'}
)

# 重設索引方便輸出
pivot_table.reset_index(inplace=True)

# 匯出為新的 Excel 檔案
output_file_path = "AquaticTrans_PivotTable.xlsx"
pivot_table.to_excel(output_file_path, index=False)

print("已成功產出樞紐分析表:", output_file_path)

執行結果:


讓ChatGPT利用Excel函式來計算各漁貨的交易量

參考文章:條件過濾漁產品交易的資料儲存到EXCEL檔案中

提示詞:用Excel的函式來計算不同漁貨的總交易量

ChatGPT產生的程式:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
import requests
import json
from openpyxl import Workbook
from openpyxl.styles import Font

# 從URL取得JSON資料
r = requests.get('https://data.moa.gov.tw/Service/OpenData/FromM/AquaticTransData.aspx')
json_data = json.loads(r.text)

# 建立Workbook
wb = Workbook()
ws = wb.active
ws.title = "漁產品交易行情"

# 寫入標題行
headers = ['交易日期', '品種代碼', '魚貨名稱', '市場名稱', '交易量', '平均價']
ws.append(headers)

# 寫入資料
row_count = 1  # 包含標題列
fish_names = set()
for item in json_data:
    if ('田蛙' in item['魚貨名稱'] or '午仔魚' in item['魚貨名稱']) and ('台中' not in item['市場名稱'] and '台北' not in item['市場名稱']):
        fish_name = item.get('魚貨名稱')
        row = [
            item.get('交易日期'),
            item.get('品種代碼'),
            fish_name,
            item.get('市場名稱'),
            float(item.get('交易量', 0) or 0),
            float(item.get('平均價', 0) or 0)
        ]
        ws.append(row)
        row_count += 1
        fish_names.add(fish_name)

# 空一列
ws.append([])
summary_start_row = row_count + 2

# 插入每種魚貨的總交易量(用 SUMIF 函式)
ws.cell(row=summary_start_row - 1, column=3, value="魚貨名稱")
ws.cell(row=summary_start_row - 1, column=5, value="總交易量")

for idx, fish_name in enumerate(sorted(fish_names)):
    row = summary_start_row + idx
    ws.cell(row=row, column=3, value=fish_name)
    # 用SUMIF計算魚貨名稱對應的總交易量
    ws.cell(row=row, column=5, value=f'=SUMIF(C2:C{row_count}, C{row}, E2:E{row_count})')

# 儲存檔案
wb.save('AquaticTransData.xlsx')

執行結果:


讓ChatGPT利用Excel函式來計算漁貨交易總交易量和總平均值

參考文章:條件過濾漁產品交易的資料儲存到EXCEL檔案中
提示詞:加上總交易量和總平均價的程式,用Excel的函式來計算

ChatGPT產生的程式:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
import requests
import json
from openpyxl import Workbook
from openpyxl.styles import Font

# 從URL取得JSON資料
r = requests.get('https://data.moa.gov.tw/Service/OpenData/FromM/AquaticTransData.aspx')
json_data = json.loads(r.text)

# 建立Workbook
wb = Workbook()
ws = wb.active
ws.title = "漁產品交易行情"

# 寫入標題行
headers = ['交易日期', '品種代碼', '魚貨名稱', '市場名稱', '交易量', '平均價']
ws.append(headers)

# 寫入資料
row_count = 1  # 包含標題行
for item in json_data:
    if ('田蛙' in item['魚貨名稱'] or '午仔魚' in item['魚貨名稱']) and ('台中' not in item['市場名稱'] and '台北' not in item['市場名稱']):
        row = [
            item.get('交易日期'),
            item.get('品種代碼'),
            item.get('魚貨名稱'),
            item.get('市場名稱'),
            float(item.get('交易量', 0) or 0),
            float(item.get('平均價', 0) or 0)
        ]
        ws.append(row)
        row_count += 1

# 在下一行寫入總計
ws.append([])  # 空行
total_row = row_count + 2  # 總計列所在的行號

# 使用 Excel 函式插入總交易量與總平均價公式
ws[f'E{total_row}'] = f'=SUM(E2:E{row_count})'
ws[f'F{total_row}'] = f'=AVERAGE(F2:F{row_count})'
ws[f'D{total_row}'] = '總計'

# 粗體顯示總計列
bold_font = Font(bold=True)
ws[f'D{total_row}'].font = bold_font
ws[f'E{total_row}'].font = bold_font
ws[f'F{total_row}'].font = bold_font

# 儲存檔案
wb.save('AquaticTransData.xlsx')

執行結果:


注意! 前一篇文章總平均價是209.69,但這裏的平均值是175.338

讓ChatGPT產生漁貨交易的加上總交易量和總平均價的程式

參考文章:條件過濾漁產品交易的資料儲存到EXCEL檔案中

用上述文章內的程式為基礎,讓ChatGPT產生漁貨交易的加上總交易量和總平均價的程式。
提示詞:加上總交易量和總平均價的程式[並附上參考文章的程式]

ChatGPT產生的程式如下:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
import requests
import json
from openpyxl import Workbook
from openpyxl.styles import Font

# 從URL取得JSON資料
r = requests.get('https://data.moa.gov.tw/Service/OpenData/FromM/AquaticTransData.aspx')
json_data = json.loads(r.text)

# 建立一個新的Workbook
wb = Workbook()
ws = wb.active
ws.title = "漁產品交易行情"

# 寫入標題行
headers = ['交易日期', '品種代碼', '魚貨名稱', '市場名稱', '交易量', '平均價']
ws.append(headers)

# 初始化統計變數
total_volume = 0.0
weighted_price_sum = 0.0

# 寫入資料
for item in json_data:
    if ('田蛙' in item['魚貨名稱'] or '午仔魚' in item['魚貨名稱']) and ('台中' not in item['市場名稱'] and '台北' not in item['市場名稱']):
        try:
            volume = float(item.get('交易量', 0))
            price = float(item.get('平均價', 0))
        except ValueError:
            continue  # 忽略格式錯誤的資料

        row = [
            item.get('交易日期'),
            item.get('品種代碼'),
            item.get('魚貨名稱'),
            item.get('市場名稱'),
            volume,
            price
        ]
        ws.append(row)

        total_volume += volume
        weighted_price_sum += volume * price

# 計算加權平均價(總價值 / 總交易量)
average_price = weighted_price_sum / total_volume if total_volume > 0 else 0

# 插入統計結果
ws.append([])  # 空行
ws.append(['總計', '', '', '', total_volume, round(average_price, 2)])

# 儲存到Excel檔案
wb.save('AquaticTransData.xlsx')

執行結果(AquaticTransData.xlsx)


2024年12月12日 星期四

Ollama與MQTT的串接

本程式是由ChatGPT所產生,MQTT Broker是採用小霸王科技的伺服器。

程式碼:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
import paho.mqtt.client as mqtt
import ollama

# MQTT 代理伺服器設定
MQTT_BROKER = "broker.MQTTGO.io"    # MQTT 伺服器地址
MQTT_PORT = 1883             # MQTT 伺服器端口
MQTT_SUB_TOPIC = "ollama/input"   # 訂閱的主題
MQTT_PUB_TOPIC = "ollama/output"  # 發布的主題

# 連接 MQTT 代理伺服器時的回調函數
def on_connect(client, userdata, flags, rc):
    print("Connected with result code " + str(rc))
    client.subscribe(MQTT_SUB_TOPIC)

# 接收 MQTT 訊息時的回調函數
def on_message(client, userdata, msg):
    payload = msg.payload.decode()
    print(f"Received message: {payload}")

    # 調用 Ollama 生成回應
    try:
        response = ollama.chat(model="llama3.2", messages=[{"role": "user", "content": payload}])
        reply = response['message']['content']
        print(f"Ollama response: {reply}")

        # 將 Ollama 回應發布到指定的 MQTT 主題
        client.publish(MQTT_PUB_TOPIC, reply)
    except Exception as e:
        print(f"Error: {e}")
        client.publish(MQTT_PUB_TOPIC, f"Error: {str(e)}")

# 初始化 MQTT 客戶端
client = mqtt.Client()
client.on_connect = on_connect
client.on_message = on_message

# 連接到 MQTT 代理伺服器
client.connect(MQTT_BROKER, MQTT_PORT, 60)

# 保持 MQTT 連接運行
client.loop_forever()

執行結果:
Connected with result code 0
Received message: 您是誰
Ollama response: 我是GPT-4,一个高级人工智能模型。我的前身是GPT-3,它在多个领域的应用中取得了成功。
Received message: 請用繁體中文
Ollama response: 我可以以繁體中文回答問題。請問您什麼事項?
Received message: 給我一個小故事
Ollama response: 有一個小女孩,她名叫 Lily,住在一條狹窄的街道上。Lily喜歡於夜晚去探索街頭,她認為這是唯一能夠解開她自己想象中的真空的時間。

一次,她經過一個老人的住宅,發現那個男人正在下午睡覺。他心不在身事地一直從窗口觀看天空。Lily被告知:這位老人一直在用他的生命來觀察世界,他的目標是要知道有多大。

Lily問他:“您为什么会这样做?”

老人回答:“我想知道生命中最美丽的一刻是什么。我不想去看世界上的坏事。"

Lily覺得這個男人比她更年輕。老人告訴 Lily,當你在觀察時,你就不是正在生活,而是在回憶過去。

Lily的發現讓她開始反思她的生活。她開始去觀察和體驗,了解世界中的每一刻。她變成了他的學生,並在他的教導下長大。



Ollama和ChatGPT有何不同呢?

向ChatGPT提問"請介紹Ollama和ChatGPT有何不同呢?",ChatGPT回覆如下:

Ollama 和 ChatGPT 在 AI 模型的應用和運作上有顯著的差異。以下是兩者之間的主要區別:

1. 基本概念與應用方式

Ollama

Ollama 是一個本地化的 AI 模型運行平台,允許使用者在自己的電腦或伺服器上運行大型語言模型 (LLM)。Ollama 支援如 LLaMA、Mistral、Gemma 等開源模型。它主要用於離線或本地環境中,適合需要隱私保護、個性化控制或希望節省雲端服務成本的場景。

ChatGPT

ChatGPT 是由 OpenAI 開發的雲端服務,基於 GPT 系列模型(如 GPT-3.5 和 GPT-4)。使用者透過網頁、API 或應用程式與模型進行互動,所有計算和數據處理均在 OpenAI 的伺服器上完成。適合需要即時訪問高性能模型和持續更新的數據的場景。

2. 部署模式

Ollama

本地部署:可以在本地設備上運行,不依賴網路。

開放原始碼模型:使用者可選擇和運行各種開源模型。

自定義能力:可自行調整模型參數和運行環境。

ChatGPT

雲端部署:所有處理和計算均在 OpenAI 的伺服器上完成。

專有模型:由 OpenAI 開發的 GPT 模型,無法完全在本地運行。

即時更新:持續更新和改進,隨時提供最新版本。

3. 隱私與數據控制

Ollama

隱私保護更高:本地運行,數據不會傳輸到外部伺服器,適合需要保密的應用場景。

完全掌控:使用者擁有數據和模型的完整控制權。

ChatGPT

數據傳輸至雲端:用戶數據需通過 OpenAI 伺服器處理,適合不敏感數據或公共應用。

隱私受限:根據 OpenAI 的隱私政策,部分數據可能用於服務改進。

4. 運算需求與性能

Ollama

硬體依賴:需要本地設備具備足夠的運算能力(如高性能 CPU 或 GPU)。

性能受限於硬體:在低性能設備上運行可能受到限制。

ChatGPT

高性能運算:由 OpenAI 提供強大伺服器支持,即使在低性能設備上也可快速運行。

無需硬體考量:使用者無需擔心本地設備的算力。

5. 使用場景

Ollama 適合:

需要高度隱私保護的應用。

無法連接網路或需離線運行的環境。

自行調整和部署 AI 模型的開發者和研究人員。

ChatGPT 適合:

快速獲取高性能 AI 模型服務的需求。

需要隨時訪問 GPT-4 等高階模型的應用。

無需自行管理和部署的便捷場景。

總結

Ollama:強調本地部署、隱私控制和開源模型的靈活性。

ChatGPT:強調雲端運行的便捷性、高性能和即時可用的特性。

選擇哪一個取決於您的需求,比如隱私、算力資源和部署場景。

2024年11月18日 星期一

利用ChatGPT產生發布MQTT主題的Python程式


 本文利用ChatGPT來產生物聯網MQTT之Python程式,其提示語和所產生的程式如下:


程式碼:


 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
import paho.mqtt.client as mqtt
import random
import time

# MQTT broker 設定
BROKER = "broker.mqttgo.io"
PORT = 1883
TOPIC = "sensor/light"
CLIENT_ID = "LightSensorPublisher"

# 建立 MQTT 客戶端
client = mqtt.Client(CLIENT_ID)

def publish_light_data():
    try:
        client.connect(BROKER, PORT, 60)
        print(f"Connected to MQTT broker: {BROKER}")

        while True:
            # 模擬光線亮度數據 (0 到 1000 lux)
            light_intensity = random.randint(0, 1000)
            payload = {"light_intensity": light_intensity}
            client.publish(TOPIC, str(payload))
            print(f"Published: {payload} to topic {TOPIC}")

            time.sleep(5)  # 每 5 秒發佈一次
    except KeyboardInterrupt:
        print("\nDisconnected from broker.")
        client.disconnect()

if __name__ == "__main__":
    publish_light_data()


把上述程式利用Python IDLE來執行,發生下列錯誤的問題。

把上述問題,詢問ChatGPT,其回答如下:
更新程式碼如下:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
import paho.mqtt.client as mqtt
import random
import time

# MQTT broker 設定
BROKER = "broker.mqttgo.io"
PORT = 1883
TOPIC = "sensor/light"
CLIENT_ID = "LightSensorPublisher"

# 建立 MQTT 客戶端
client = mqtt.Client(client_id=CLIENT_ID, protocol=mqtt.MQTTv311, callback_api_version=5)

def publish_light_data():
    try:
        client.connect(BROKER, PORT, 60)
        print(f"Connected to MQTT broker: {BROKER}")

        while True:
            # 模擬光線亮度數據 (0 到 1000 lux)
            light_intensity = random.randint(0, 1000)
            payload = {"light_intensity": light_intensity}
            client.publish(TOPIC, str(payload))
            print(f"Published: {payload} to topic {TOPIC}")

            time.sleep(5)  # 每 5 秒發佈一次
    except KeyboardInterrupt:
        print("\nDisconnected from broker.")
        client.disconnect()

if __name__ == "__main__":
    publish_light_data()



經測試方法1,發生下列問題。


採用方法2,重新安裝paho-mqtt套件。

執行結果:


MQTTGO broker的畫面如本文最上圖,記得要按下連線鈕,並訂閱sensor/light主題。

2024年10月28日 星期一

請ChatGPT協助除錯ESP8266機智雲的MicroPython程式

一、先給提示詞"修訂程式與並給一個初步程式碼:









 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
from machine import Pin
from machine import Timer

# Define led_status as a global variable
led_status = 0

# Initialize LED pin
led = Pin(2, Pin.OUT)

# Define the LED flash function
def flash_led(timer):
    global led_status
    led.value(led_status)
    led_status = 1 - led_status

# Set up a periodic timer to toggle the LED every 500ms
tim = Timer(-1)
tim.init(period=500, mode=Timer.PERIODIC, callback=flash_led)

# No need for a while loop if the timer handles the LED toggling
# Just keep the script alive
while True:
    pass










ChatGPT很快地幫忙找出程式有三項問題,包括:全域變數、計時器的初始化、以及多餘程式碼,並給予正確的程式碼。

二、提示語告訴要產生的程式和使用接腳


 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
from machine import Pin, Timer, PWM
import time

# 定義 LED 狀態
led_status = 0

# 初始化 LED 引腳
led = Pin(2, Pin.OUT)

# 定義 PWM 的引腳,使用 GPIO 4
buzzer = PWM(Pin(4))

# 音符對應的頻率(以簡單音階為例)
tones = {
    'C': 261,
    'D': 294,
    'E': 329,
    'F': 349,
    'G': 392,
    'A': 440,
    'B': 493
}

# 播放音符的函數
def play_tone(tone, duration):
    if tone in tones:
        buzzer.freq(tones[tone])  # 設定頻率
        buzzer.duty(512)  # 設定占空比,0-1023 之間,512 表示 50% 占空比
        time.sleep(duration)  # 播放音符的持續時間
        buzzer.duty(0)  # 停止聲音

# 定義 LED 閃爍的函數
def flash_led(timer):
    global led_status
    led.value(led_status)
    led_status = 1 - led_status

# 設置一個定時器,每500毫秒切換 LED 狀態
tim = Timer(-1)
tim.init(period=500, mode=Timer.PERIODIC, callback=flash_led)

# 播放一段簡單音樂的函數
def play_melody():
    melody = ['C', 'D', 'E', 'F', 'G', 'A', 'B', 'C']  # 簡單音階
    duration = 0.5  # 每個音符的持續時間為0.5秒
    for note in melody:
        play_tone(note, duration)
        time.sleep(0.1)  # 音符之間的短暫停頓

# 播放音樂
play_melody()

# 保持程式運行
while True:
    pass



三、請ChatGPT產生機智雲板子上的光敏電阻和LED控制程式

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
from machine import Pin, ADC, PWM
import time

# 初始化光敏電阻 (A0)
light_sensor = ADC(0)

# 初始化 RGB LED 引腳
red = PWM(Pin(15), freq=500)
green = PWM(Pin(12), freq=500)
blue = PWM(Pin(13), freq=500)

# 設置初始 LED 亮度
red.duty(0)
green.duty(0)
blue.duty(0)

# 設定光線閾值,低於這個值時視為光線暗,進行顏色變化
LIGHT_THRESHOLD = 500  # 根據實際環境調整

# 顏色變化函數
def set_color(r, g, b):
    red.duty(r)
    green.duty(g)
    blue.duty(b)

# 變化 RGB 顏色
def color_cycle():
    set_color(1023, 0, 0)    # 紅色
    time.sleep(0.5)
    set_color(0, 1023, 0)    # 綠色
    time.sleep(0.5)
    set_color(0, 0, 1023)    # 藍色
    time.sleep(0.5)
    set_color(1023, 1023, 0) # 黃色
    time.sleep(0.5)
    set_color(0, 1023, 1023) # 青色
    time.sleep(0.5)
    set_color(1023, 0, 1023) # 紫色
    time.sleep(0.5)
    set_color(1023, 1023, 1023) # 白色
    time.sleep(0.5)

# 主迴圈
while True:
    light_value = light_sensor.read()  # 讀取光敏電阻的數值
    print("Light Value:", light_value)  # 可在控制台查看光線讀數

    if light_value < LIGHT_THRESHOLD:  # 如果光線低於閾值,啟動 RGB 變化
        color_cycle()
    else:
        # 關閉 RGB LED
        set_color(0, 0, 0)

    time.sleep(1)  # 每秒檢查一次光線狀態



最後把兩支程式請ChatGPT合併後的程式:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
from machine import Pin, Timer, PWM, ADC
import time

# 初始化 LED 引腳
led = Pin(2, Pin.OUT)
led_status = 0

# 初始化蜂鳴器的 PWM 引腳,使用 GPIO 4
beeper = PWM(Pin(4, Pin.OUT))

# 初始化光敏電阻 (A0) 和 RGB LED (GPIO 15, 12, 13)
light_sensor = ADC(0)
red = PWM(Pin(15), freq=500)
green = PWM(Pin(12), freq=500)
blue = PWM(Pin(13), freq=500)

# 設置初始 RGB LED 亮度
red.duty(0)
green.duty(0)
blue.duty(0)

# 光線強度閾值,低於此值視為光線暗
LIGHT_THRESHOLD = 500

# 定義 LED 閃爍的函數
def flash_led(timer):
    global led_status
    led.value(led_status)
    led_status = 1 - led_status

# 定義 PWM 控制 RGB 顏色
def set_color(r, g, b):
    red.duty(r)
    green.duty(g)
    blue.duty(b)

# 顏色變化函數
def color_cycle():
    set_color(1023, 0, 0)    # 紅色
    time.sleep(0.5)
    set_color(0, 1023, 0)    # 綠色
    time.sleep(0.5)
    set_color(0, 0, 1023)    # 藍色
    time.sleep(0.5)
    set_color(1023, 1023, 0) # 黃色
    time.sleep(0.5)
    set_color(0, 1023, 1023) # 青色
    time.sleep(0.5)
    set_color(1023, 0, 1023) # 紫色
    time.sleep(0.5)
    set_color(1023, 1023, 1023) # 白色
    time.sleep(0.5)

# 音樂音符和頻率
notes = [
    392, 330, 330, 0, 
    349, 294, 294, 0, 
    262, 294, 330, 349, 392, 392, 392, 0
]

# 音樂播放函數
def play_melody():
    for note in notes:
        if note == 0:
            beeper.duty(0)  # 休止符
        else:
            beeper.duty(512)  # 設置音量
            beeper.freq(note) # 設置頻率
        time.sleep(0.2)  # 音符持續 0.2 秒
        beeper.duty(0)
        time.sleep(0.1)  # 休止 0.1 秒

# 設置一個定時器,每 500 毫秒切換 LED 狀態
tim_led = Timer(-1)
tim_led.init(period=500, mode=Timer.PERIODIC, callback=flash_led)

# 主迴圈
while True:
    # 讀取光敏電阻的數值
    light_value = light_sensor.read()
    print("Light Value:", light_value)

    if light_value < LIGHT_THRESHOLD:  # 如果光線低於閾值,顯示 RGB 顏色變化
        color_cycle()
    else:
        set_color(0, 0, 0)  # 光線充足時,關閉 RGB LED

    play_melody()  # 播放音樂
    time.sleep(2)  # 每隔 2 秒播放一次音樂並檢查光線狀況


2024年6月16日 星期日

(AI協作)讓ChatGPT生成彩虹鳥童話故事再生成Python控制程式

前一篇文章:(AI協作)用Python設計亮亮鼠控制程式再運用ChatGPT產生童話故事

範例一:

提示詞:

彩虹鳥有那些能力呢?

ChaptGPT生成的內容:

在遙遠的魔法森林裡,住著一隻名叫亮亮的小老鼠和一隻美麗的小鳥,名叫彩虹。彩虹不僅以她五彩斑斕的羽毛和動聽的歌聲而聞名,她還擁有三項神奇的能力,讓她在森林中獨一無二。

第一項能力是彩虹能夠治癒傷痛。她的羽毛中蘊含著魔法,只要輕輕觸碰受傷的動物,它們的傷口就會迅速癒合。不論是身體上的創傷還是心靈上的痛楚,彩虹的羽毛都能帶來安慰和治療。

第二項能力是彩虹能夠預知天氣變化。每當暴風雨即將來臨或是陽光燦爛的日子即將到來,彩虹的羽毛會隨著天氣的變化而改變顏色。這項能力讓森林裡的動物們能夠提前準備,避開惡劣的天氣,或者享受美好的時光。

第三項能力是彩虹的歌聲具有魔力。當她唱起歌來,所有聽到她歌聲的動物都會感到心情愉快,煩惱和憂慮會隨之消散。她的歌聲能夠喚醒沉睡的花朵,使植物茁壯成長,讓整個森林都充滿生機。

一天,亮亮在森林裡遇見了彩虹,被她的美麗和善良深深吸引。亮亮決定用自己的能力來保護和幫助彩虹,兩隻動物很快成為了密不可分的好朋友。

有一天,一場突如其來的暴風雨襲擊了森林,彩虹的羽毛變成了深紫色,預示著危險的來臨。亮亮立即爬到彩虹的樹下,用閃燈發出警告信號,提醒其他動物們避開風暴。彩虹則用她的歌聲安撫著動物們的情緒,讓大家在驚恐中找到一絲平靜。

暴風雨過後,彩虹和亮亮一起巡視森林,治癒受傷的動物,幫助大家重建家園。彩虹用她的羽毛治癒了亮亮的傷口,亮亮則用他的電燈照亮了彩虹的道路。兩隻動物在彼此的陪伴和支持中,建立了深厚的感情。

最終,亮亮和彩虹的愛情故事在森林中傳開,成為了魔法森林裡最美麗的傳說。動物們都為他們的愛情感到高興,他們的故事也代代相傳,永不消逝。在這片充滿魔力的森林裡,亮亮和彩虹用他們的光芒和歌聲,帶來了無盡的希望和幸福。


範例二:

提示詞:

幫我產生彩虹鳥Python程式可以在micro:bit

上執行,完成三項能力

ChapGPT生成內容:

當然,這裡有一個 Python 程式,可以在 micro:bit 上模擬彩虹鳥的三項能力。這段程式包括了用 LED 顯示屏顯示不同的圖案來模擬治癒能力、預知天氣變化和播放歌曲。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
from microbit import *
import music
import random

# 彩虹鳥能力的顯示圖案
heal_icon = Image.HEART
weather_icons = [Image.SUNNY, Image.CLOUD, Image.RAIN]
sing_icon = Image.MUSIC_QUAVER

# 治癒能力
def heal():
    display.show(heal_icon)
    sleep(2000)
    display.clear()

# 預知天氣變化
def predict_weather():
    weather = random.choice(weather_icons)
    display.show(weather)
    sleep(2000)
    display.clear()

# 播放歌曲
def sing():
    display.show(sing_icon)
    music.play(music.ENTERTAINER)
    display.clear()

# 主循環
while True:
    if button_a.was_pressed():
        heal()
    if button_b.was_pressed():
        predict_weather()
    if pin_logo.is_touched():
        sing()

這段程式實現了彩虹鳥的三項能力:

1. **治癒能力**:按下 A 鍵,LED 顯示屏會顯示心形圖案,模擬治癒能力。

2. **預知天氣變化**:按下 B 鍵,LED 顯示屏會隨機顯示太陽、雲朵或雨滴圖案,模擬預知天氣變化的能力。

3. **播放歌曲**:觸摸 micro:bit 的 logo,LED 顯示屏會顯示音符圖案,並播放一段音樂,模擬彩虹鳥的歌聲。

將這段程式上傳到 micro:bit 上,即可看到彩虹鳥的三項神奇能力在你的 micro:bit 上展示出來。

執行失敗,因Image.SUNNY, Image.CLOUD, Image.RAIN並未定義。

範例三:

提示詞:

產生Image的LED 顯示屏會隨機顯示太陽、雲朵或雨滴圖案,Python程式,樣式如下:

display.show(Image('00300:' '03630:' '36963:' '03630:' '00300'))

ChatGPT生成的內容:

當然,這裡有一個 Python 程式,可以在 micro

上模擬彩虹鳥的三項能力,其中包括 LED 顯示屏隨機顯示太陽、雲朵或雨滴圖案的功能。


 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
from microbit import *
import music
import random

# 治癒能力的顯示圖案
heal_icon = Image('09090:'
                  '90909:'
                  '09990:'
                  '09090:'
                  '00900')

# 預知天氣變化的圖案
sunny_icon = Image('00300:'
                   '03630:'
                   '36963:'
                   '03630:'
                   '00300')

cloud_icon = Image('00000:'
                   '00330:'
                   '03663:'
                   '36666:'
                   '03660')

rainy_icon = Image('00000:'
                   '00300:'
                   '03630:'
                   '03630:'
                   '36963')

weather_icons = [sunny_icon, cloud_icon, rainy_icon]

# 播放歌曲的顯示圖案
sing_icon = Image('00000:'
                  '09090:'
                  '00900:'
                  '09090:'
                  '00000')

# 治癒能力
def heal():
    display.show(heal_icon)
    sleep(2000)
    display.clear()

# 預知天氣變化
def predict_weather():
    weather = random.choice(weather_icons)
    display.show(weather)
    sleep(2000)
    display.clear()

# 播放歌曲
def sing():
    display.show(sing_icon)
    music.play(music.ENTERTAINER)
    display.clear()

# 主循環
while True:
    if button_a.was_pressed():
        heal()
    if button_b.was_pressed():
        predict_weather()
    if pin_logo.is_touched():
        sing()

這段程式實現了彩虹鳥的三項能力:

  1. 治癒能力:按下 A 鍵,LED 顯示屏會顯示心形圖案,模擬治癒能力。
  2. 預知天氣變化:按下 B 鍵,LED 顯示屏會隨機顯示太陽、雲朵或雨滴圖案,模擬預知天氣變化的能力。
  3. 播放歌曲:觸摸 micro:bit的 logo,LED 顯示屏會顯示音符圖案,並播放一段音樂,模擬彩虹鳥的歌聲。

將這段程式上傳到 micro:bit上,即可看到彩虹鳥的三項神奇能力在你的 micro:bit上展示出來。

執行結果正常。

範例四:
提示詞:
治癒能力請加上WS2812B-6的程式,顏色可以變化

ChatGPT生成內容:
當然,這裡是一個改進過的 Python 程式,可以在 micro:bit上模擬彩虹鳥的三項能力,並包括使用 WS2812B LED 變化顏色來展示治癒能力。為了使用 WS2812B LED,你需要安裝 micro:bit的 neopixel 庫。

首先,請確保你已經安裝了 neopixel 庫。如果還沒有安裝,你可以在 Mu 編輯器中使用以下命令來安裝:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
import neopixel
from microbit import pin0, sleep

# 創建 neopixel 物件,假設有 6 顆 LED 連接在 pin0 上
np = neopixel.NeoPixel(pin0, 6)

# 設置所有 LED 的顏色為紅色
for i in range(6):
    np[i] = (255, 0, 0)
np.show()

現在,將這段程式整合到主程式中:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
from microbit import *
import music
import random
import neopixel

# 創建 neopixel 物件,假設有 6 顆 LED 連接在 pin0 上
np = neopixel.NeoPixel(pin0, 6)

# 治癒能力的顯示圖案
heal_icon = Image('09090:'
                  '90909:'
                  '09990:'
                  '09090:'
                  '00900')

# 預知天氣變化的圖案
sunny_icon = Image('00300:'
                   '03630:'
                   '36963:'
                   '03630:'
                   '00300')

cloud_icon = Image('00000:'
                   '00330:'
                   '03663:'
                   '36666:'
                   '03660')

rainy_icon = Image('00000:'
                   '00300:'
                   '03630:'
                   '03630:'
                   '36963')

weather_icons = [sunny_icon, cloud_icon, rainy_icon]

# 播放歌曲的顯示圖案
sing_icon = Image('00000:'
                  '09090:'
                  '00900:'
                  '09090:'
                  '00000')

# 設置 neopixel 顏色變化
def set_neopixel_color():
    for i in range(6):
        np[i] = (random.randint(0, 255), random.randint(0, 255), random.randint(0, 255))
    np.show()

# 治癒能力
def heal():
    display.show(heal_icon)
    set_neopixel_color()
    sleep(2000)
    np.clear()
    display.clear()

# 預知天氣變化
def predict_weather():
    weather = random.choice(weather_icons)
    display.show(weather)
    sleep(2000)
    display.clear()

# 播放歌曲
def sing():
    display.show(sing_icon)
    music.play(music.ENTERTAINER)
    display.clear()

# 主循環
while True:
    if button_a.was_pressed():
        heal()
    if button_b.was_pressed():
        predict_weather()
    if pin_logo.is_touched():
        sing()

這段程式實現了以下功能:

  1. 治癒能力:按下 A 鍵,LED 顯示屏會顯示心形圖案,同時 WS2812B LED 燈會隨機變化顏色,模擬治癒能力。
  2. 預知天氣變化:按下 B 鍵,LED 顯示屏會隨機顯示太陽、雲朵或雨滴圖案,模擬預知天氣變化的能力。
  3. 播放歌曲:觸摸 micro
    的 logo,LED 顯示屏會顯示音符圖案,並播放一段音樂,模擬彩虹鳥的歌聲。

請確保 WS2812B LED 正確連接到 micro:bit的 pin0,並且提供適當的電源。將這段程式上傳到 micro:bit上,即可看到彩虹鳥的三項神奇能力在你的 micro:bit上展示出來。

執行結果正常。

(AI協作)用Python設計亮亮鼠控制程式再運用ChatGPT產生童話故事



本篇文章是利用Python設計亮亮鼠控制程式,再運用ChatGPT產生童話故事。

程式編輯器:https://python.microbit.org/

程式碼:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# Imports go at the top
from microbit import *
mode = 0
value = 0

# Code in a 'while True:' loop repeats forever
while True:
    display.show(mode+1)
    if button_a.was_pressed():
        mode+=1
        mode%=3
    if button_b.was_pressed():
        value = 1-value
    if mode == 0:
        pin0.write_digital(value)         
    if mode == 1:
        pin0.write_digital(value)    
        value = 1-value
    if mode == 2:
        if display.read_light_level()<100:
            pin0.write_digital(0)
        else:
            pin0.write_digital(1)
    sleep(1000)

接下來,試著運用ChatGPT來產生老鼠的童話故事。

範例一:

提示詞:
給我一則童話故事

在魔法森林住著一隻小老鼠,它有3項能力
1.能控制頭頂上的電燈
2.用閃燦方式警告其他動物
3.當天色變暗自動點燈

ChatGPT生成的故事:
在遙遠的魔法森林中,住著一隻特別的小老鼠名叫閃燦。閃燦並不是普通的老鼠,它擁有三項神奇的能力。

首先,閃燦能控制頭頂上的一盞電燈。不論白天或黑夜,只要它願意,這盞燈就能隨時打開或關閉,照亮周圍的一切。

第二,閃燦能用閃燈的方式來警告其他動物。當它感受到危險臨近時,閃燦會快速地閃爍電燈,發出明亮的警告信號,提醒大家趕快躲藏。

第三,當天色變暗時,閃燦的電燈會自動點亮,為森林中的動物們照亮道路,讓大家不至於迷失方向。

一天,魔法森林裡出現了一隻狡猾的狐狸,它打算捉住小動物們作為晚餐。閃燦感受到了狐狸的威脅,決定要保護它的朋友們。它爬上一棵高高的樹,用電燈發出了強烈的閃爍信號,提醒大家有危險。動物們迅速躲進了安全的地方,狐狸無奈地在森林裡四處徘徊,卻找不到任何目標。

夜幕降臨,森林變得漆黑一片。閃燦的電燈自動亮起,像一盞明亮的燈塔,指引著迷路的小動物們回家。狐狸被閃燦的光芒迷惑,無法靠近任何動物,只好悻悻地離開了魔法森林。

森林再次恢復了寧靜,動物們對閃燦充滿了感激之情。他們決定為它舉辦一場盛大的慶祝會,感謝它的英勇和智慧。閃燦成了森林裡的英雄,大家都知道,只要有閃燦在,魔法森林就會永遠安全、明亮。

從此以後,閃燦和它的朋友們過著幸福快樂的生活,森林裡的每一個角落都充滿了光明和歡笑。這個故事也成為了魔法森林中最流傳的傳說,代代相傳,永不消逝。

範例二:

提示詞:
能再換成另一個童話嗎?

ChatGPT生成的故事:
在遙遠的魔法森林裡,住著一隻名叫亮亮的小老鼠。亮亮並不是一隻普通的老鼠,它擁有三項神奇的能力,這些能力讓它成為了森林中的守護者。

亮亮的第一項能力是能控制頭頂上的一盞電燈。這盞電燈可以隨亮亮的意願隨時打開或關閉,無論在任何時刻,它都能照亮自己和周圍的環境。

第二項能力是亮亮可以用閃燈的方式來警告其他動物。如果森林裡有危險靠近,亮亮會迅速閃爍它的電燈,發出耀眼的光芒,提醒所有動物們注意避開危險。

第三項能力是當天色變暗時,亮亮的電燈會自動點亮。這樣一來,即使在黑夜裡,亮亮也能為森林中的動物們照亮道路,讓他們不至於迷路。

有一天,森林裡來了一群可怕的野狼,它們準備襲擊森林裡的小動物們。亮亮立刻感應到了這股威脅,決定要保護它的朋友們。它迅速爬到一棵高大的樹上,開始用電燈發出緊急的閃爍信號。動物們看到信號後,立刻明白了亮亮的警告,迅速地躲進了各自的藏身處。

當夜幕降臨時,亮亮的電燈自動點亮,為那些還在外面的小動物們指引回家的路。野狼們被亮亮的強光所迷惑,無法靠近任何一隻小動物,只好氣餒地離開了魔法森林。

動物們對亮亮充滿了感激,它們決定為亮亮舉辦一場盛大的慶祝會,感謝它的英勇和機智。亮亮成了森林中的英雄,所有的動物們都知道,只要有亮亮在,魔法森林就會永遠安全、明亮。

從那天起,亮亮和它的朋友們過上了幸福快樂的生活。森林裡的每一個角落都充滿了光明和歡笑,這個故事也成為了魔法森林裡最美好的傳說,代代相傳,永不消逝。

範例三:

提示詞:
換成愛情故事

ChatGPT生成的故事:
在遙遠的魔法森林裡,住著一隻名叫亮亮的小老鼠。亮亮並不是普通的老鼠,它擁有三項神奇的能力:能控制頭頂上的電燈,用閃燈警告其他動物,並在天色變暗時自動點燈。

有一天,亮亮在森林裡遇到了一隻美麗的小鳥,名叫彩虹。彩虹的羽毛五彩斑斕,歌聲動聽,她是森林裡最受歡迎的居民之一。亮亮被彩虹的美麗和善良所吸引,漸漸地愛上了她。

然而,彩虹住在一棵高大的樹上,每當夜幕降臨,樹下總是黑暗一片。亮亮知道彩虹害怕黑暗,決定用自己的能力來保護她。他每天晚上都會在彩虹的樹下點亮電燈,為她驅散黑暗,讓她安心入睡。

一天晚上,一場暴風雨襲擊了魔法森林。狂風大作,雷電交加,彩虹的樹枝被風暴吹得搖搖欲墜。亮亮感受到了彩虹的恐懼,他迅速爬上樹,用自己的身體擋住了風雨,並用電燈閃爍發出求救信號。

森林裡的動物們看到了亮亮的信號,紛紛趕來幫忙。大象用鼻子穩住樹幹,猴子用藤蔓固定樹枝,小鳥們則一起唱起了安慰的歌聲。終於,暴風雨過去了,彩虹的家得救了。

彩虹被亮亮的勇敢和無私深深感動,她飛下樹來,輕輕地親吻了亮亮的額頭。她對亮亮說:“謝謝你,亮亮。你的光芒不僅驅散了黑暗,也溫暖了我的心。”

從那天起,亮亮和彩虹成了一對形影不離的好朋友。他們一起在森林裡探索,一起享受陽光和雨露。亮亮的電燈不僅照亮了彩虹的生活,也照亮了他們之間真摯的愛情。

動物們都為亮亮和彩虹感到高興,他們的愛情故事在森林裡流傳開來,成為了魔法森林裡最美麗的傳說。亮亮和彩虹也過上了幸福快樂的生活,每天都在彼此的陪伴和光芒中迎接新的黎明。

2023年9月29日 星期五

用Python以及ChapGPT來繪製虎尾鎮雜糧類前三名作物的近三年走勢圖

1.資料來源:農情報告資訊網

2.利用一般作物查詢的各項作物種植面積查詢(個別縣市及鄉鎮),來查詢虎尾鎮109年~111年的農作,再把資訊給ChatGPT,請它整理出雜糧類前三名。

3. 請ChatGPT,下達指令"給我Python程式,並繪製圖表",若產生簡體版,可以下達"用繁體字",程式碼如下:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
import matplotlib.pyplot as plt

# 年度數據
years = ["109", "110", "111"]
peanuts = [1206.31, 1235.16, 1304.03]
corn = [1080.20, 967.96, 917.76]
sweet_potatoes = [117.52, 112.90, 87.85]

# 建立新的圖表
plt.figure(figsize=(10, 6))

# 繪製落花生的趨勢線
plt.plot(years, peanuts, marker='o', label='落花生')

# 繪製食用玉米的趨勢線
plt.plot(years, corn, marker='o', label='食用玉米')

# 繪製甘藷的趨勢線
plt.plot(years, sweet_potatoes, marker='o', label='甘藷')

# 添加圖例
plt.legend()

# 添加標題和標籤
plt.title('雲林縣虎尾鎮農產品產量趨勢')
plt.xlabel('年度')
plt.ylabel('產量(公斤)')

# 顯示圖表
plt.grid(True)
plt.show()

4.執行結果:

5.加上中文字型顯示的程式

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
import matplotlib.pyplot as plt
from matplotlib.font_manager import FontProperties

# 指定繁體中文字型
font_path = "C:\Windows\Fonts\kaiu.ttf"  # 請替換為您自己的繁體中文字型文件路徑
font_prop = FontProperties(fname=font_path)

# 年度數據
years = ["109", "110", "111"]
peanuts = [1206.31, 1235.16, 1304.03]
corn = [1080.20, 967.96, 917.76]
sweet_potatoes = [117.52, 112.90, 87.85]

# 建立一個新的圖表
plt.figure(figsize=(10, 6))

# 繪製落花生的趨勢線
plt.plot(years, peanuts, marker='o', label='落花生')

# 繪製食用玉米的趨勢線
plt.plot(years, corn, marker='o', label='食用玉米')

# 繪製甘藷的趨勢線
plt.plot(years, sweet_potatoes, marker='o', label='甘藷')

# 添加圖例
plt.legend(prop=font_prop)

# 添加標題和標籤
plt.title('雲林縣虎尾鎮農產品產量趨勢', fontproperties=font_prop)
plt.xlabel('年度', fontproperties=font_prop)
plt.ylabel('產量(公斤)', fontproperties=font_prop)

# 顯示圖表
plt.grid(True)
plt.show()

6.執行結果: