資料介紹
描述
描述
這是另一個支持 Twitch 的簡單可穿戴設(shè)備。這一次是關(guān)于如何幫助流以某種小車的方式跟上大型聊天室的步伐。
讓我們快速模仿我們最喜歡的紫色反派。
讓我們變得真實。每個人都會從抽取中恢復(fù)過來,所以讓我們暫停一半的聊天而不是全面禁止。
構(gòu)建說明
步驟1
Snap 手套與 esp32 搭配起來相當(dāng)簡單。我把它連接到一個單細(xì)胞脂肪上以獲得動力。Gpio 14是電容式觸摸管腳,編碼時稱為T6。我將一根電線連接到 gpio 14 并將其焊接到銀導(dǎo)電線上!?
*請記住保持您的觸摸板小,以便它們具有良好的靈敏控制。太大的墊將導(dǎo)致沒有觸摸觸發(fā)或持續(xù)觸摸,具體取決于靈敏度的設(shè)置方式。
第2步
導(dǎo)電織物肯定很難焊接(如果你是我的話)。我發(fā)現(xiàn)讓你的熨斗剛好熱到足以熔化你的焊料,除此之外什么都不是你想要留下的地方。
通過將一些焊料熔化到電線上來給電線鍍錫,將其放在導(dǎo)電織物上,并在 3 秒內(nèi)用烙鐵加熱。每次爆裂后檢查焊點,看看是否需要施加更多的熱量,或者它是否有效。
慢慢來,不要害怕搞砸這一步。
步驟 3
我用普通線縫合了所有傳感器墊,并縫合了一些電纜。這有助于反復(fù)彎曲焊點。
最靠近拇指的傳感器是中指末端的位置,同時彈響。<
圖>
第4步
此代碼的文件托管在此項目的文件部分中。
讓我們從導(dǎo)入套接字、時間、隨機(jī)和數(shù)學(xué)庫開始。
import cfg
import socket
import time
import random
import math
他們的 cfg 文件是使用您的用戶名、密碼和您要放入 twitch 頻道的機(jī)器人的頻道名稱定制的。
現(xiàn)在讓我們定義我們的超時命令將如何運(yùn)行。
def timeout(sock, user, secs):
"""
Time out a user for a set period of time.
Keyword arguments:
sock -- the socket over which to send the timeout command
user -- the user to be timed out
secs -- the length of the timeout in seconds (default 600)
"""
chat(sock, "/timeout {}".format(user, secs))
def untimeout(sock,user):
chat(sock,"/unban {}".format(user))
當(dāng)你調(diào)用這個函數(shù)時,你需要指出你試圖與哪個套接字進(jìn)行通信,你超時的用戶名,以及他們將被禁止多長時間。
我還包含了一個使用 Twitch 的 unban 功能的撤銷超時命令。
s = socket.socket()
s.connect((cfg.HOST,cfg.PORT))
s.send("PASS {}\r\n".format(cfg.PASS).encode("utf-8"))
s.send("NICK {}\r\n".format(cfg.NICK).encode("utf-8"))
s.send("JOIN {}\r\n".format(cfg.CHAN).encode("utf-8"))
CHAT_MSG=re.compile(r"^:\w+!\w+@\w+.tmi.twitch.tv PRIVMSG #\w+ :")
這部分代碼創(chuàng)建套接字,并傳遞在我前面提到的 cfg 文件中排序的信息。它還為 twitch 消息創(chuàng)建編譯器/反編譯器。
讓我們創(chuàng)建一些變量來存儲用戶名,甚至是每個人的聊天計數(shù)器。
vips = []
vrem = []
vipc = []
vipCount = 0
?現(xiàn)在讓我們創(chuàng)建一個無限循環(huán)來運(yùn)行,并等待來自 twitch(聊天)的消息。然后我們將檢查它是否是 ping。如果我們的機(jī)器人要保持與 Twitch 的連接,則需要發(fā)送一個 pong。
while True:
response = s.recv(1024).decode("utf-8")
if response == "PING :tmi.twitch.tv\r\n":
s.send("PONG :tmi.twitch.tv\r\n".encode("utf-8"))
print('sent')
但是,如果它不是 ping,而是我們想要關(guān)注的實際聊天呢?我們會將消息和用戶名從我們收到的信息中分離出來。
else:
username = re.search(r"\w+", response).group(0) # return the entire match
message = CHAT_MSG.sub("", response)
# s.send(s,username +" + " + message)
print(username + ": " + message)
有了這些信息,我們將開始收集聊天中的每個人,將他們放入列表中,并計算他們在聊天中發(fā)言的次數(shù)。
if username in vips: # will need to edit out tvheadbot, atltvhead, tmi from the messages collected! before doing the thanos glove
# if its tvhead bot do nothing
ind = vips.index(username)
vipCount = vipc[ind]
vipCount = vipCount + 1
vipc[ind] = vipCount
print(vips)
print(vipc)
# print(username + " has spoken " + str(vipCount) + " times.")
else:
vips.append(username)
vipc.append(1)
如果用戶名不在列表 VIPS 中,它將把它們添加到列表中。它還將一個整數(shù)添加到另一個列表中以計算它們的交互。如果用戶在列表中,它將添加到他們的整數(shù)中。
接下來讓我們看看消息是否是我們的 SNAP 命令。Snap 命令將為那些將被隨機(jī)超時的人創(chuàng)建一個新列表,不會重復(fù)。這個新列表被計算為所有在聊天中發(fā)言的人的一半,四舍五入。它還說明了所有聊天 tmi 和您的聊天機(jī)器人中的 twitch 實體。在我的例子中是 tvheadbot。
if message.strip() == "SNAP" and username == "tvheadbot":
# these operations move half of the chat to a new list for removal
oglength = len(vips)
delenght = math.ceil((oglength-3)/2)
while len(vrem) < delenght:
userToMove = random.choice(vips)
if userToMove == "tmi" or userToMove == "tvheadbot" or userToMove == "atltvhead":
# do nothing
print("Encountered either Tmi or tvheadbot or atltvhead")
else:
if userToMove in vrem:
print("User " + userToMove + " is already to be timed out.")
else:
vrem.append(userToMove)
?一旦我們將一半的聊天分類到刪除列表中。是時候讓他們超時了。
# this is where I do the timeout
for q in vrem:
# print(q)
timeout(s, q, 10)
time.sleep(1 / cfg.RATE)
# remember to wipe out vrem I want to unban / untimout
time.sleep(1 / cfg.RATE)
將每個人都列在一個列表中,您也可以輕松取消對他們的封禁!
您的聊天機(jī)器人不能做的一些事情是超時版主并將您的聊天設(shè)置為僅表情模式。我希望我可以啟用僅表情模式,但我必須使用主播用戶名來實現(xiàn)。
步驟 5
我使用的是舊版本的 IRCClient,我對其進(jìn)行了修改以用于 Twitch。如果您使用最新版本,它將開箱即可與 Twitch 一起使用。<>
首先要添加的是庫,定義我們的 wifi 網(wǎng)絡(luò),以及傳遞給 twitch 的信息。
#include
#include
/*-----------------------------------------------------------------------------------*/
#define ssid1 "Wifi"
#define password1 "Password"
#define IRC_SERVER "irc.chat.twitch.tv"
#define IRC_PORT 6667
#define IRC_NICK "Bot_Name"
#define IRC_CHAN "#Channel_Name"
#define IRC_PASS "oauth:####"
WiFiClient wiFiClient;
IRCClient client(IRC_SERVER, IRC_PORT, wiFiClient);
我們在這里調(diào)用我們的 wificlient 和我們的 ircclients,并列出適當(dāng)?shù)?twitch 端口。您的機(jī)器人、頻道名稱和密碼都是您需要更改的內(nèi)容。
讓我們定義一些變量,這些變量將幫助我們在我們不想的時候不讓人們超時。
boolean snapboo = false;
boolean emoteboo = false;
?下一部分代碼用于 esp 32 中內(nèi)置的觸摸傳感器。我們還創(chuàng)建了一個函數(shù),該函數(shù)將在觸發(fā)快照時調(diào)用。
int thresholdTwo = 60;
bool touch2detected = false;
byte touchCountTwo = 0;
unsigned long touchTimeTwo;
unsigned long oldTouchTimeTwo;
void gotTouch2(){
//figure out calibration here!
//get time and incriment timer
touchTimeTwo = millis();
touchCountTwo++;
// if counter is above a certain # in a certain timeout decrease sensitivity (time is going to be half second)
if(touchCountTwo >=3 && (touchTimeTwo-oldTouchTimeTwo)<=400 && thresholdTwo > 20){
thresholdTwo=thresholdTwo-1;
// reset count
touchCountTwo=0;
}
// if counter is below a # and a certain timeout increase sensitivity (time is going to be 2 min?)
else if((touchTimeTwo-oldTouchTimeTwo)>=60000){ // touchCount<1 && probably doesn't need the <1 touch count. if it creates too sensitive of a sensor, it will be backed off imediatly after. it should jut create more triggers after the high five
thresholdTwo++;
// reset counter
touchCountTwo=0;
}
// if counter is below # and timer is between sensitivity triggers touch detected
else if(400<(touchTimeTwo-oldTouchTimeTwo) && (touchTimeTwo-oldTouchTimeTwo)<60000){
touch2detected = true;
delay(500);
// reset counter
}
// time saved to new variable and reset
oldTouchTimeTwo = touchTimeTwo;
}?
每次觸發(fā)快照時,它都會校準(zhǔn)傳感器,通過比較時間間隔和觸發(fā)次數(shù)來檢查它是否是真正的觸摸。
?接下來讓我們創(chuàng)建我們的設(shè)置循環(huán)并附加我們的中斷。wifi 和客戶端也將開始。
void setup() {
WiFi.begin(ssid1, password1);
client.setCallback(callback);
client.setSentCallback(debugSentCallback);
touchAttachInterrupt(T7,gotTouch2,thresholdTwo);
}
?現(xiàn)在,在我們的主循環(huán)中,我們將把我們的信息傳遞給 twitch,并一直傳遞它直到我們建立連接。
void loop() {
// put your main code here, to run repeatedly:
if (!client.connected()) {
//Serial.println("Attempting IRC connection...");
// Attempt to connect
if (client.connect(IRC_NICK, IRC_CHAN, IRC_PASS)) {
//Serial.println("connected");
client.sendMessage(IRC_CHAN, "Hello everyone! I'm TvheadBot, a construct, assistant within the head of Atltvhead. If you have any questions type !help , and I'll post a link to all the channel commands. Let's Tune into Good Vibes! <3");
} else {
//Serial.println("failed... try again in 5 seconds");
// Wait 5 seconds before retrying
delay(5000);
}
return;
}
?我們將調(diào)用我們的回調(diào)函數(shù)來檢查 twitch 消息并將其分解為 ping/pong 交互、聊天消息和用戶名。我們還將開始檢查是否檢測到快照,并查看我們的任何密鑰是否已解鎖。
client.loop();
//Time Outs or Emote Only
if(touch2detected){
touch2detected = false;
if(snapboo){
snapboo = false;
client.sendMessage(IRC_CHAN,"SNAP");
} else if(emoteboo){
emoteboo = false;
client.sendMessage(IRC_CHAN,"IT'S EMOTE TIME!");
} else{
client.sendMessage(IRC_CHAN,"High Five Mode Initiated");
}
}
}
?不幸的是,聊天機(jī)器人無法觸發(fā)僅表情模式,真可惜。
這些命令被我們的 python 腳本識別以啟動超時。
上面提到,我們分解了 twitch 消息,用于 ping/pong、用戶名、消息。
如果一個特定的單詞是由特定的用戶名(用戶名)寫的,那么解鎖快照或僅表情模式(我又很笨,聊天機(jī)器人無法觸發(fā))。
void callback(IRCMessage ircMessage) {
//Serial.println("In CallBack");
// PRIVMSG ignoring CTCP messages
if (ircMessage.command == "PRIVMSG" && ircMessage.text[0] != '\001') {
//Serial.println("Passed private message.");
String message("<" + ircMessage.nick + "> " + ircMessage.text);
if(ircMessage.text == "sk" && ircMessage.nick == "username"){
snapboo = true;
client.sendMessage(IRC_CHAN,"The Snap has been unlocked!");
}
else if(ircMessage.text == "ek" && ircMessage.nick == "username"){
emoteboo = true;
client.sendMessage(IRC_CHAN,"Emote only ready!");
}
return;
}
}
?最后,只需為客戶端設(shè)置調(diào)試。
void debugSentCallback(String data) {
//Serial.println("I am in debug");
Serial.println(data);
}
步驟 6
如何關(guān)閉你的構(gòu)建并捕捉你的聊天!
不要忘記切一個洞,這樣你的手指就可以接觸到傳感器!?
文件
Snap_Glove.ino :ESP32 和 Arduino 的 Snap Glove 代碼
Thanos Twitch Bot.py :一個基本的 Twitch 機(jī)器人,它收集聊天中的所有用戶,將其中一半的用戶分段以超時,并在特定人員發(fā)送特定消息時將其超時缺少用于與 twitch 通信的 cfg 文件(它的密碼和其他)-> # cfg.pyHOST = "irc.twitch.tv" # Twitch IRC 服務(wù)器端口 = 6667 # 總是使用端口 6667!NICK = "twitch_username" # 你的 Twitch 用戶名,小寫 PASS = "oauth:xxxxxxxxxxxxxxxxxxxx " # 你的 Twitch OAuth tokenCHAN = "#channel" # 你想加入的頻道
?
- 用于可穿戴設(shè)備的感應(yīng)式觸摸按鈕
- 可穿戴設(shè)備的電針活動應(yīng)用簡介
- 用于便攜可穿戴設(shè)備的RX8130CE
- 2023可穿戴設(shè)備行業(yè)技術(shù)與市場分析 22次下載
- 可穿戴設(shè)備開源分享
- 癲癇發(fā)作預(yù)測可穿戴設(shè)備的深度學(xué)習(xí)
- 如何設(shè)計更加小巧、續(xù)航能力更強(qiáng)的可穿戴設(shè)備
- 可穿戴設(shè)備的設(shè)計方向與規(guī)范資料下載
- 可穿戴設(shè)備的電源方案探討資料下載
- 可穿戴設(shè)備中的電源管理技術(shù)資料下載
- ADI:可穿戴設(shè)備,醫(yī)院之外的健康衛(wèi)士 1次下載
- 可穿戴設(shè)備和物聯(lián)網(wǎng)的系統(tǒng)設(shè)計與NOR閃存在可穿戴設(shè)備中的應(yīng)用 7次下載
- 基于無線模塊的可穿戴設(shè)備的應(yīng)用方案 3次下載
- 使用無線模塊構(gòu)建可穿戴設(shè)備 9次下載
- 移動與可穿戴設(shè)備的解決方案 25次下載
- 醫(yī)療可穿戴設(shè)備的設(shè)計需求和解決方案 3408次閱讀
- 從可穿戴設(shè)備過渡到醫(yī)療設(shè)備 671次閱讀
- 可穿戴設(shè)備應(yīng)用程序的實現(xiàn) 965次閱讀
- 可穿戴設(shè)備:滿足卓越電源管理的需求 897次閱讀
- 可穿戴設(shè)備發(fā)展歷程!醫(yī)療可穿戴設(shè)備和傳感器生態(tài)系統(tǒng)正在快速成長! 6647次閱讀
- 淺析Dialog可穿戴設(shè)備解決方案 4932次閱讀
- 如何設(shè)計一種可穿戴設(shè)備待機(jī)延長的方案 889次閱讀
- 關(guān)于可穿戴設(shè)備市場的調(diào)研報告 3111次閱讀
- MEMS六軸傳感器的可穿戴設(shè)備電路設(shè)計—電路精選(37) 4012次閱讀
- 可穿戴設(shè)備氧傳感器電路解析—電路精選(35) 4664次閱讀
- 醫(yī)療可穿戴設(shè)備:如何打開慢性病困惑的“黑箱” 1195次閱讀
- 醫(yī)療可穿戴設(shè)備的6大領(lǐng)頭羊,都是誰? 956次閱讀
- 可穿戴設(shè)備電源設(shè)計關(guān)鍵點解析 1764次閱讀
- 簡單有效的可穿戴設(shè)備ESD靜電防護(hù)原則 3076次閱讀
- 為什么可穿戴設(shè)備如此流行? 1131次閱讀
下載排行
本周
- 1山景DSP芯片AP8248A2數(shù)據(jù)手冊
- 1.06 MB | 532次下載 | 免費(fèi)
- 2RK3399完整板原理圖(支持平板,盒子VR)
- 3.28 MB | 339次下載 | 免費(fèi)
- 3TC358743XBG評估板參考手冊
- 1.36 MB | 330次下載 | 免費(fèi)
- 4DFM軟件使用教程
- 0.84 MB | 295次下載 | 免費(fèi)
- 5元宇宙深度解析—未來的未來-風(fēng)口還是泡沫
- 6.40 MB | 227次下載 | 免費(fèi)
- 6迪文DGUS開發(fā)指南
- 31.67 MB | 194次下載 | 免費(fèi)
- 7元宇宙底層硬件系列報告
- 13.42 MB | 182次下載 | 免費(fèi)
- 8FP5207XR-G1中文應(yīng)用手冊
- 1.09 MB | 178次下載 | 免費(fèi)
本月
- 1OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費(fèi)
- 2555集成電路應(yīng)用800例(新編版)
- 0.00 MB | 33566次下載 | 免費(fèi)
- 3接口電路圖大全
- 未知 | 30323次下載 | 免費(fèi)
- 4開關(guān)電源設(shè)計實例指南
- 未知 | 21549次下載 | 免費(fèi)
- 5電氣工程師手冊免費(fèi)下載(新編第二版pdf電子書)
- 0.00 MB | 15349次下載 | 免費(fèi)
- 6數(shù)字電路基礎(chǔ)pdf(下載)
- 未知 | 13750次下載 | 免費(fèi)
- 7電子制作實例集錦 下載
- 未知 | 8113次下載 | 免費(fèi)
- 8《LED驅(qū)動電路設(shè)計》 溫德爾著
- 0.00 MB | 6656次下載 | 免費(fèi)
總榜
- 1matlab軟件下載入口
- 未知 | 935054次下載 | 免費(fèi)
- 2protel99se軟件下載(可英文版轉(zhuǎn)中文版)
- 78.1 MB | 537798次下載 | 免費(fèi)
- 3MATLAB 7.1 下載 (含軟件介紹)
- 未知 | 420027次下載 | 免費(fèi)
- 4OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費(fèi)
- 5Altium DXP2002下載入口
- 未知 | 233046次下載 | 免費(fèi)
- 6電路仿真軟件multisim 10.0免費(fèi)下載
- 340992 | 191187次下載 | 免費(fèi)
- 7十天學(xué)會AVR單片機(jī)與C語言視頻教程 下載
- 158M | 183279次下載 | 免費(fèi)
- 8proe5.0野火版下載(中文版免費(fèi)下載)
- 未知 | 138040次下載 | 免費(fèi)
評論
查看更多