不久前,我買了一臺舊的、便宜的熱敏收據(jù)打印機(jī),我想通過另一種有用的方法來重新利用它。所以我準(zhǔn)備將收據(jù)打印機(jī)用作Alexa(或GoogleHome、Siri等)的IOT打印機(jī)。
從Pi打印
第一步是讓舊的收據(jù)打印機(jī)在新的設(shè)備中再次實(shí)現(xiàn)打印功能。我選擇使用RaspberryPiZeroW作為控制器,因為它價格便宜且體積小。實(shí)際上它也足夠小,可以放入收據(jù)打印機(jī)外殼本身,因此沒有外部連接。
為了讓Pi啟動并運(yùn)行,我們需要下載RaspbianOS并使用Etcher等程序?qū)⑵淇啼浀絤icroSD卡上。將其與HDMI電纜、鍵盤、鼠標(biāo)和電源一起插入Pi。
當(dāng)Pi啟動并進(jìn)入桌面界面時,您可以通過單擊右上角的無線圖標(biāo)并選擇無線連接的名稱來連接到無線。然后,如果您右鍵單擊同一個無線圖標(biāo),您可以轉(zhuǎn)到網(wǎng)絡(luò)設(shè)置并設(shè)置靜態(tài)IP地址,以便我們可以輕松地通過網(wǎng)絡(luò)連接到它。最后,您要單擊主菜單并選擇“Raspbian配置編輯器”,然后在“接口”選項卡下,確保已啟用SSH。然后保存并重新啟動您的Pi。
要遠(yuǎn)程連接到Pi,您需要一個SSH客戶端。Windows系統(tǒng)的話,建議使用Putty客戶端。您可以使用我們之前設(shè)置的Pi的靜態(tài)IP地址連接到它。然后您就可以使用“pi”作為用戶名和“raspberry”作為密碼登錄。
接下來展現(xiàn)在我們面前的就是Pi的終端界面,我們要做的第一件事是確保軟件是最新的,所以運(yùn)行:
隨著軟件的更新,我們現(xiàn)在可以安裝ESC-POS打印機(jī)軟件和所需的庫。
然后我們可以記下一個漂亮的小“HelloWorld”測試腳本。
連接到物聯(lián)網(wǎng)(第1部分)
如果沒有要打印的東西,打印機(jī)會有什么好處?我想啟用從不同互聯(lián)網(wǎng)服務(wù)打印的功能。一種選擇是選擇特定的互聯(lián)網(wǎng)服務(wù),跟蹤他們的API文檔并基于他們的API編寫應(yīng)用程序。
有一個很棒的網(wǎng)站叫做“IfThisThenThat”,它根據(jù)一組標(biāo)準(zhǔn)觸發(fā)不同互聯(lián)網(wǎng)服務(wù)(Alexa、GoogleHome、Gmail、Facebook、Instagram、Twitter等)的操作。例如,“如果”我在Facebook上發(fā)帖(this),“那么”給我發(fā)一封電子郵件(that)。
所以在前半部分,我注冊了一個免費(fèi)帳戶,你可以開始為你想要觸發(fā)的不同服務(wù)創(chuàng)建一個新的“小程序”。我的小程序的“這個”部分將是Alexa。有很多Alexa觸發(fā)器可供選擇,但我將選擇顯示“詢問您的購物清單上有什么”的觸發(fā)器。我希望它最終可以觸發(fā)RaspberryPi上的Python腳本,因此對于腳本的“that”部分,我們要選擇Webhooks。
在Webhooks選項中,我們可以添加一個指向我們的Pi的URL,稍后我們將返回。我們可以將Method字段保留為“Get”,并為內(nèi)容類型選擇“PlainText”。對于正文字段,單擊“添加成分”并選擇“整個列表”。這會將整個購物清單作為Get請求發(fā)送。
連接到物聯(lián)網(wǎng)(第2部分)
上一步處理“Internet”部分,現(xiàn)在讓我們使用RaspberryPi處理“things”部分。為了與“IfThisThenThat”webhooks小程序進(jìn)行通信,我們需要在RaspberryPi上設(shè)置一個Web服務(wù)器。有許多不同的方式來設(shè)置Web服務(wù)器,但考慮到我最終想要運(yùn)行Python腳本,我決定使用Python的Flask服務(wù)器。
Pi已經(jīng)預(yù)裝了所有的Flask庫,所以我們需要做的就是開始編寫一個測試腳本:
在其中添加一些提供簡單網(wǎng)頁的代碼。
現(xiàn)在只需保存程序并使用以下命令運(yùn)行它:
您將通過命令響應(yīng)看到Flask運(yùn)行的默認(rèn)端口是端口5000。因此,在Web瀏覽器中,如果您輸入Pi的IP地址:5000,您應(yīng)該會看到文本“您的Flask服務(wù)器正在運(yùn)行!”
我們已經(jīng)有了測試Python代碼,以及我們的測試Flask服務(wù)器。所以接下來我們需要將它們結(jié)合起來,并結(jié)合一些從我們的Webhook小程序中提取數(shù)據(jù)的代碼,以能夠打印到我們的收據(jù)打印機(jī)中。
先創(chuàng)建一個新的Python文件:
并在其中添加以下代碼:
#!flask/bin/python
#IMPORTTHEFLASKANDPRINTERLIBRARIES
fromflaskimportFlask,request
fromescpos.printerimportUsb
#ASSIGNVARIABLESFORTHEPRINTERANDFLASK
p=Usb(0x0416,0x5011)
app=Flask(__name__)
#CREATE‘INDEX’PAGE
@app.route(‘/’)
defindex():
return‘YourFlaskserverisworking!’
#CREATE“PAGE”CALLED“LIST”FORPRINTINGALEXASHOPPINGLIST
@app.route(‘/list’)
deflist():
#CAPTURE“GET”DATAFROMIFTTTWEBOOKS
content=request.get_data()
#CONVERTRAWDATATOSTRING
str_content=str(content)
#DIVIDEDATAINTOSEPERATELINES
str_split=str_content.splitlines()
#SEPERATEWORDSBYCOMMAANDADDTOANEWLIST
newlist=[]
forwordinstr_split:
word=word.split(‘,’)
newlist.extend(word)
#REMOVEFORMATTINGMARKS
rmv_marks=[s.strip(“b‘”)forsinnewlist]
#PRINTHEADER
#print(“ShoppingList\n”)
p.text(“ShoppingList:\n”)
#ENUMERATEANDPRINTEACHITEMINLIST
r=1
forxinrmv_marks:
#print(str(r)+“。”+x+“\n”)
p.text(str(r)+“。”+x+“\n”)
r+=1
#RETURNRESULTS
return’x‘
#RUNTHEPROGRAM
if__name__==’__main__‘:
app.run(debug=True,host=’0.0.0.0‘)
您可以運(yùn)行它以查看它是否返回任何錯誤,但它還不能與我們的webhook一起使用,因為到這一步為止,服務(wù)器僅在本地運(yùn)行。尚無Webhook可連接的外部URL。我們可以在路由器上設(shè)置端口轉(zhuǎn)發(fā),只使用面向外部的IP地址,但這并不是太安全。作為替代方案,我決定選擇NGROK。
使用Ngrok設(shè)置外部訪問
Ngrok可以建立與網(wǎng)絡(luò)的安全連接,而無需暴露您的外部IP或弄亂端口轉(zhuǎn)發(fā)。注冊一個免費(fèi)帳戶后,它會為您提供一個授權(quán)令牌。然后在您的RaspberryPi上,您可以下載它、解壓縮它、連接您的身份驗證令牌,然后在端口5000上運(yùn)行它:
在結(jié)果屏幕上,它會為您提供一個轉(zhuǎn)發(fā)地址(http://random-string.ngrok.io),您可以在我們的Webhook小程序中使用該地址。所以回到“IfThisThenThat”,在URL字段中,輸入您的Ngrok轉(zhuǎn)發(fā)地址并將其指向我們Flask服務(wù)器上的“列表”頁面。它應(yīng)該看起來像這樣
然后繼續(xù)保存更改。
我為了測試它能夠保持Ngrok運(yùn)行,打開一個新終端,然后運(yùn)行我們的python腳本。當(dāng)這兩個項目都運(yùn)行時,詢問Alexa購物清單上有什么。一兩分鐘后,它應(yīng)該可以打印出結(jié)果。
如果您想立即打印,只需轉(zhuǎn)到IFTTT上的Applet,然后單擊“立即檢查”。如果一切順利,收據(jù)打印機(jī)應(yīng)該會打印出您的購物清單上的內(nèi)容!
我們需要添加的最后一點(diǎn)代碼是每次Pi啟動時自動啟動ngrok和我們的燒瓶服務(wù)器的方法。我們可以通過使我們的Python腳本可執(zhí)行來輕松地做到這一點(diǎn):
然后我們可以編輯我們的/etc/rc.local文件,使它看起來像這樣:
將Pi添加到打印機(jī)
我的收據(jù)打印機(jī)在外殼內(nèi)有很多空白空間。由于RaspberryPiZero是如此之小,所以我認(rèn)為將其隱藏在收據(jù)打印機(jī)中以使其看起來像一個設(shè)備會更酷。唯一的問題是收據(jù)打印機(jī)在12v上運(yùn)行,而Pi在5v上運(yùn)行。因此,如果我們只想要一根電源線為它們兩者供電,我們將不得不將12v電源降為5v。
使用7805穩(wěn)壓器、1uf電容器和10uf電容器,我能夠創(chuàng)建簡單的5v穩(wěn)壓器,并將其連接到收據(jù)打印機(jī)的邏輯板上。我將“-”線焊接到公共地線,然后將“+”線焊接到電源開關(guān)的“開”側(cè),以便在打開和關(guān)閉打印機(jī)時Pi會打開和關(guān)閉。我使用萬用表進(jìn)行了測試,以確認(rèn)輸出對于Pi來說是安全的。然后我焊接了一根微型USB電纜并將其連接到Pi。將電纜插入打印機(jī)并翻轉(zhuǎn)開關(guān)后,打印機(jī)和Pi都打開了!
最后,我鉆了一個孔,將USB電纜從Pi連接到打印機(jī)。我找到了一個將5v穩(wěn)壓器和Pi放入打印機(jī)外殼的地方,然后我將所有東西放回原處。所以現(xiàn)在打印機(jī)也有它自己的獨(dú)立網(wǎng)絡(luò)服務(wù)器了!
-
物聯(lián)網(wǎng)
+關(guān)注
關(guān)注
2909文章
44631瀏覽量
373248 -
打印機(jī)
+關(guān)注
關(guān)注
10文章
769瀏覽量
45680 -
樹莓派
+關(guān)注
關(guān)注
116文章
1707瀏覽量
105627
發(fā)布評論請先 登錄
相關(guān)推薦
評論