google-sheet2Html

/*! * * Google Sheets To HTML v0.9a * * To use, simply replace the "tq?key=" value in the * URL below with your own unique Google document ID * * The Google document's sharing must be set to public * */ google.load('visualization', '1', { packages: ['table'] }); var visualization; function drawVisualization() { var query = new google.visualization.Query('https://spreadsheets.google.com/tq?key=https://docs.google.com/spreadsheets/d/1-vUEZ9tae5C_OXzSi0dQPWwUrO3H5S-gImB5afFgqDg/edit?usp=sharing'); query.setQuery('SELECT A, B, C, D label A "Duration", B "Song", C "Requested By", D "URL"'); query.send(handleQueryResponse); } function handleQueryResponse(response) { if (response.isError()) { alert('There was a problem with your query: ' + response.getMessage() + ' ' + response.getDetailedMessage()); return; } var data = response.getDataTable(); visualization = new google.visualization.Table(document.getElementById('table')); visualization.draw(data, { legend: 'bottom' }); } google.setOnLoadCallback(drawVisualization);
Showing posts with label python. Show all posts
Showing posts with label python. Show all posts

Thursday, February 2, 2017

ซิมเพล็กซ์ รีพีทเตอร์ simplex repeater

โปรแกรม simplex repeater ทำเองก็ได้

บทความนี้ แสดงวิธีการ สร้างสถานนีทวนสัญญาณ เพื่อศึกษา การเขียนโปรแกรมเท่านั้น โปรดขอคำแนะนำกับ ศูนย์ควบคุมข่าย ประจำจังหวัด ก่อน ทดสอบ ครับ

โปรแกรม ซิเพล็ก รีพีทเตอร์ ในบทความนี้ใช้ ภาษาไพทอน ร่วมกัน sound meter  ถ้าอ่านแล้วไม่เข้าใจ ขอให้ย้อน ไปดู โพสท์ เก่าๆ ก่อน  โปรแกรมนี้ จะเป็นการเรียกใช้ สคริป ให้ทำงานเมื่อมีระดับเสียงดังในระดับที่กำหนด โดยจะทำการ บันทึกเสียง 10 วินาที จากนั้น จะส่ง สัญญาณ จาก Pyserial ควบคุม ปุ่ม PTT ของวิทยุสื่อสาร ออกอากาศ ด้วยเสียงที่บันทึกไว้โดย สคริป ที่ควบคุม ชื่อ repeater.sh มีรายละเอียดังในภาพ


 เมื่อ soundMeter ได้รับสัญญาณ เสียงจาก ไมโครโฟน ดังกว่าระดับที่ตั้งไว้ จะทำการบันทึกเสียงในไฟล์ชื่อ simplex.wav 
โดยทำการบันทึกเสียง แชนแนลเดียว ด้วย คำสั่ง rec -c 1 โดยกำหนดความยาวเป็นเวลา 10 วินาที่ ด้วย พารามิเตอร์ trim 0 10
คำสั่ง sleep 0.5 ให้ หยุด 0.5 วินาที เพื่อ ให้ pyserial ทำงาน แล้วจึง ส่งเสียงออกมาด้วย คำสั่ง play simplex.wav
 
ในการใช้งาน window  กับ linux การเรียกใช้ Pyserial ต่างกันเล็กน้อย ไปดูโพสท์ เก่าๆ แล้วแก้ไข การควบคุมที่ บรรทัด #insert PTT on กับ #insert PTT off

ดูวีดีโอตัวอย่างใช้งาน https://youtu.be/z5jsPE5CeDg





ในส่วน GUI ด้วย Tkinter Python 2 มีรายละเอียดดังนี้
#!/usr/bin/python
# coding: utf-8

#program radio+computer  by HS1ZFK
#last modify 2/02/2560 ConchRepeater#  version 2.0 Sox

import os
from Tkinter import *





def SetSerial():
    print "set usb serial converter"



def RepeaterOn():
    #repeater Start
    print "start repeater"
    #print ( tiggerValue.get())
    tig = str(tiggerValue.get())
    command = "soundmeter --trigger +" + tig +" 1 --action exec-stop --exec repeater.sh"
    print command
    os.system(command)

def About():
    Message(Mwin, text="Simplex Repeater by HSZFK"
            "set Mic noise Levea ""and time then click start", bg="royalblue", fg="ivory",relief=GROOVE).pack(padx=10, pady=10)

Mwin = Tk()  #Main Window

#set Menu bar
menubar = Menu(Mwin)


#create pulldown menu
ModeMenu = Menu(menubar,tearoff=0)
ModeMenu.add_command(label="Exit ", command=Mwin.quit)
menubar.add_command(label="Set up serial port", command=SetSerial)

menubar.add_command(label="Quit!", command=Mwin.quit)
menubar.add_command(label="About", command=About)


#display menu
Mwin.config(menu=menubar, bg="light cyan")

Mwin.geometry("450x350+300+300")        #set size and position of window
Mwin.title('Simplex_Sox v2.0 by HS1ZFK')




tiggerValue = Scale(Mwin, from_=300, to=500, length=600,label="trigger",bg="light cyan", troughcolor="blue", tickinterval=25, orient=HORIZONTAL)
tiggerValue.set(370)
tiggerValue.pack()

# set button
Btn1 = Button(Mwin,text=" Start Repeater ", bg="pale green",command=RepeaterOn)
Btn1.pack()

Mwin.mainloop()     #start the event loop


Thursday, January 26, 2017

โปรแกรม อ่าน ประกาศข่าว ชมรม ออโตเมติก

ประกาศข่าว ชมรม ด้วยคอมพิวเตอร์


   เนื่องด้วย พรบ. คอมพิวเตอร์ฉบับใหม่ ที่ประกาศใช้(25 มค.2560) มีบทกำหนดโทษผู้เผยแพร่ ซอร์ดโค้ด ที่มีผู้อื่นนำไปใช้ในทางผิดกฎหมาย จึงขอประกาศไว้ในที่นี้ว่า ผู้เขียนมีเจตนา สอนการเขียนโปรแกรมเพื่อการศึกษา เท่านั้น

   ในบทความนี้ เป็นการเขียน Python script สำหรับ เรียก CQ ในการแข่งขัน CQ contest หรือ ไปใช้ในการประกาศข่าวสมาคม โดยตั้งเวลาได้ โดยใช้ กราฟฟิก GUI ของ Tkinter

ก่อนทำการเรียกใช้ โปรแกรม
สิ่งที่ต้องเตรียมคือ ไฟล์เสียงนามสกุล wav  ซึ่งเป็นไฟล์ เสียงที่ บันทึกไว้ล่วงหน้า รูปร่างหน้าตาของ โปรแกรม มีดังนี้





แถบ slide bar เพื่อเลือกการตั้งเวลา ให้รอกี่นาที จึงอ่านประกาศ ซึ่งตั้งได้ 30 นาที เมื่อทำการตั้งเวลาแล้ว ให้กดปุ่ม Start
เมื่อครบเวลาที่กำหนด จะ เล่น ไฟล์เสียง ออกทางวิทยุสื่อสาร ดังภาพ


 ภาพด้านล่าง เป็น สคริป




ในการใช้งานจริง ให้แก้ไข ที่ บรรทัด def PlayAudio โดยทำการแทรกโค้ด สังเปิดปิด สวิท ptt ของวิทยุสื่อสาร

และ ให้แก้ไข การนับเวลา ที่ start_timer ซึ่งได้แก้ไว้ให้ เร็วกว่าจริง เพื่อ บันทึกวีดีโอ
 https://youtu.be/yyIs20I4qHo


Wednesday, December 7, 2016

ใช้ python ควบคุมวิทยุสื่อสาร ตอน การ import โมดูล


ผู้ที่เริ่มหัดเขียนโปรแกรม อาจจะสับสนวิธีการ เรียกใช้โมดูลในภาษา python ทำให้ไปต่อไม่ถูก ตั้งแต่ บรรทัดแรก ลองอ่านบทความนี้ดู ครับ

วิธีการ import เรียกใช้ โมดูล ในที่นี้จะยกตัว โมดูล Tkinter

มี สองวิธี คือ

วิธีที่ 1

from Tkinter import *

จะสามารถ เรียกใช้ ฟังชั่นในโมดูลได้ เลย ดังในตัวอย่างที่ ผ่านมา
window = Tk()

ลองดูรายละเอียด 

from Tkinter import *

window = Tk()
window.title("HS1ZFK")
btnTxRx = Button(window, text="Tx/Rx", bg="light blue")
btnTxRx.grid(padx=80, pady=20)
window.mainloop()

วิธีที่

ในกรณีที่ต้องใช้ โมดูล หลายๆ อันในโปรแกรมเดียวกัน อาจจะเกิดปัญหาจาก ฟังชั่นในโมดูล มีชื่อ ซ้ำกัน เพื่อแก้ปัญหาดังกล่าว จะทำการ import ด้วยวิธีนี้
Import Tkinter
เมื่อจะเรียกใช้ ฟังชั่นในโมดูล ต้อง เรียกโมดูลก่อน ตามด้วยเครื่องหมาย จุด ตามด้วยชื่อฟังชั่น
window = Tkinter.Tk()

สังเกตุ โค้ดของวิธีที่ 2

import Tkinter


window = Tkinter.Tk()
window.title("HS1ZFK")
btnTxRx = Tkinter.Button(window, text="Tx/Rx", bg="light blue")
btnTxRx.grid(padx=80, pady=20)
window.mainloop()

ซึ่งทั้งสองวิธีจะได้ ผลเหมือนกันดังในภาพ
 
 


Friday, December 2, 2016

ใช้ Python ควบคุมวิทยุสื่อสาร ตอน Tkinter GUI




   การนำ คอมพิวเตอร์ มาพ่วงต่อกับ วิทยุสือสาร ผ่าน usb-serial มีวิธีประยุกต์ใช้ได้

หลายวิธี เช่น ให้ เปิิด ไฟล์ mp3 เสียง เรียก CQ ในการแข่งขัน , การ อ่านประกาศ ของ สมาคม / ชมรม ผ่านทาง อินเตอร์ เน็ท คือ ให้ Net_Control อยู่ที่บ้าน สามารถ ควบคุม วิทยุสื่อสาร ที่อยู่ สมาคม / ชมรม ได้ , การส่งข้อมูล ที่ เข้า รหัส (codec) ลองอ่านดูบทความเก่า ครับ
 

การใช้ python script ผ่านทาง command line ไม่ยาก แต่ จะถ้าจะ

แจก จ่ายให้ เพื่อน นักวิทยุสมัครเล่น เลือก ใช้ กราฟฟิก อินเตอร์ เฟส 

 GUI ง่ายสำหรับ เพื่อนๆ มากกว่า บทความนี้ จะใช้ Tkinter ในการสร้าง 

แทน Wxpython ในบทความเก่าที่ผ่านมา



สำหรับผู้ที่ใช้ windows เมื่อทำการ ติดตั้ง python ปรกติ จะติดตั้ง Tkinter ให้อยู่แล้ว แต่ ถ้าใช้ระบบ Linuxเริ่มติดตั้งด้วย

sudo apt-get update
sudo apt-get install python-tk


ในการเรียกใช้ Gui python tkinter ก่อนอื่นต้องตรวจสอบว่าเป็น python เวอร์ชั่นไหน เพราะ คำสั่ง

import ต่างกัน โดยเวอร์ชั่นของ python ให้สังเกตุจาก ข้อมูลหลังเรียกใช้ ดังตัวอย่างเป็น เวอร์ชั่น 2.7.12
ใน python 2 จะเรียก ใช้ด้วยคำสั่ง

from Tkinter import *
สังเกตุ อักษร T เป็นตัวพิมพ์ ใหญ่

และใน python 3 จะเรียกใช้ด้วยคำสั่ง

from tkinter import *
โดยจะใช้ัอักษร t ตัวเล็ก

ในที่นี้จะเขียน สคริป เพื่อ เรียก ปุ่มกด จากนั้น จะ ค่อยๆ เพิ่ม การควบคุม usb – serial เพื่อพวงต่อกับวิทยุ
และ การเรียกใช้ ไฟล์ mp3 การตั้งเวลา เป็น ลำดับ

ลองดู สคริป นี้ 
from Tkinter import *



window = Tk()

window.title("HS1ZFK")

btnTxRx = Button(window, text="Tx/Rx", bg="light blue")

btnTxRx.grid(padx=80, pady=20)

window.mainloop()


ลองดูรายละเอียด

from Tkinter import *
เริ่มแรก ทำการ import โมดูล tkinter เครื่องหมาย * คือ เรียกทุกอย่างใน โมดูล

window = Tk()
จากนั้นทำการสร้าง instance ของ Tk class โดยตั้งชื่อว่า window

window.title("HS1ZFK")
กำหนด title ของ window

btnTxRx = Button(window, text="Tx/Rx", bg="light blue")
สร้างปุ่มกด ชื่อ btnTxRx และใช้สี light blue หากต้องการเปลี่ยนสีให้ดูรายละเอียดที่


btnTxRx.grid(padx=80, pady=20)
สังเกตุ grid method จะทำการควบคุม ตำแหน่งของ widget ด้วย จำนวนช่องวาง pixel ตำแหน่ง x และ y

window.mainloop()
เป็นคำสั่งให้ วน loop จนกว่า จะ คลิกที่ เครื่องหมาย x เพื่อเป็นการหยุดการทำงาน

เมื่อเขียน script แล้วทำการบันทึกในตัวอย่างใช้ชื่อ firstTk.py สำหรับ Linux ให้ทำการ เปลี่ยนค่า permission ด้วยคำสั่ง
$ sudo chmod +x firstTk.py

จากนัน ให้โปรแกรมทำงานด้วยคำสั่ง
$ python ./firstTk.py
จะได้ หน้าต่าง ดังในภาพ




Thursday, June 16, 2016

Text to speech คนใบ้เล่นวิทยุสื่อสารได้


เป็น ใบ้ ก็ เล่นวิทยุสมัครเล่นได้ 

 
      แรกเริ่ม ผมสร้างโปรแกรมนี้ให้ สถานนีควบคุมข่าย 144800 สมุทรปราการ ไว้เป็นการควบคุมวิทยุสื่อสารระยะไกล เพื่ออ่าน ไฟล์ ข้อความประกาศของสมาคม เคยเอาไปให้ดูสมาคมดู ในวันที่จัดสอบ นักวิทยุสมัครเล่น ที่่ ห้างอิมพีเรียลสำโรง

     เมื่อเปิดคลิปให้ดูได้รับคำตอบว่า "วิทยุสื่อสารควบคุมระยะไกล ให้คอมพิวเตอร์มันพูดเองได้ แปลกตรงไหน คราวแรกตั้งใจจะบอกว่า ต่อยอดไป ใช้เข้า hopping code, ไว้หา QRM, ไว้แข่งขัน ในงาน คอนเทส  และ อืี่นๆ ด้วยความเซ็งในอารมณ์ สุดท้ายเก็บไว้เล่นเอง ทดสอบออกอากาศ กับ HS1KQL, E22FNQ, E22MGD และ อีกครั้งกับ เพื่อนสมาชิก กลุ่ม HS1AP , HS1ZHY

โปรแกรม ชื่อ PyMesV14 เขียนด้วยภาษา pythonโดยใช้ เสียงสังเคราะห์ ให้คอมพิวเตอร์ อ่านข้อความแล้วออกอากาศ  มีความสามารถดังนี้

1 load ไฟล์ข้อความได้ ที่ใช้ประจำได้
2 พิมพ์ ข้อความเพิ่มเติม ได้
3 ลบ ข้อความ ได้

ในวีดีโอคลิป เริ่มจาก เพี่มข้อความใหม่ลงไป แล้วกดปุ่ม tts Tx ย่อจาก text to speech ส่วน Tx คือส่งออกอากาศ
จากนั้นลองกดคำที่ตั้งไว้ล่วงหน้า ให้อ่านออกอากาศ