資料介紹
描述
描述
這是另一個支持 Twitch 的簡單可穿戴設備。這一次是關于如何幫助流以某種小車的方式跟上大型聊天室的步伐。
讓我們快速模仿我們最喜歡的紫色反派。
讓我們變得真實。每個人都會從抽取中恢復過來,所以讓我們暫停一半的聊天而不是全面禁止。
構建說明
步驟1
Snap 手套與 esp32 搭配起來相當簡單。我把它連接到一個單細胞脂肪上以獲得動力。Gpio 14是電容式觸摸管腳,編碼時稱為T6。我將一根電線連接到 gpio 14 并將其焊接到銀導電線上!?
*請記住保持您的觸摸板小,以便它們具有良好的靈敏控制。太大的墊將導致沒有觸摸觸發或持續觸摸,具體取決于靈敏度的設置方式。
第2步
導電織物肯定很難焊接(如果你是我的話)。我發現讓你的熨斗剛好熱到足以熔化你的焊料,除此之外什么都不是你想要留下的地方。
通過將一些焊料熔化到電線上來給電線鍍錫,將其放在導電織物上,并在 3 秒內用烙鐵加熱。每次爆裂后檢查焊點,看看是否需要施加更多的熱量,或者它是否有效。
慢慢來,不要害怕搞砸這一步。
步驟 3
我用普通線縫合了所有傳感器墊,并縫合了一些電纜。這有助于反復彎曲焊點。
最靠近拇指的傳感器是中指末端的位置,同時彈響。<
圖>
第4步
此代碼的文件托管在此項目的文件部分中。
讓我們從導入套接字、時間、隨機和數學庫開始。
import cfg
import socket
import time
import random
import math
他們的 cfg 文件是使用您的用戶名、密碼和您要放入 twitch 頻道的機器人的頻道名稱定制的。
現在讓我們定義我們的超時命令將如何運行。
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))
當你調用這個函數時,你需要指出你試圖與哪個套接字進行通信,你超時的用戶名,以及他們將被禁止多長時間。
我還包含了一個使用 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+ :")
這部分代碼創建套接字,并傳遞在我前面提到的 cfg 文件中排序的信息。它還為 twitch 消息創建編譯器/反編譯器。
讓我們創建一些變量來存儲用戶名,甚至是每個人的聊天計數器。
vips = []
vrem = []
vipc = []
vipCount = 0
?現在讓我們創建一個無限循環來運行,并等待來自 twitch(聊天)的消息。然后我們將檢查它是否是 ping。如果我們的機器人要保持與 Twitch 的連接,則需要發送一個 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,而是我們想要關注的實際聊天呢?我們會將消息和用戶名從我們收到的信息中分離出來。
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)
有了這些信息,我們將開始收集聊天中的每個人,將他們放入列表中,并計算他們在聊天中發言的次數。
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 中,它將把它們添加到列表中。它還將一個整數添加到另一個列表中以計算它們的交互。如果用戶在列表中,它將添加到他們的整數中。
接下來讓我們看看消息是否是我們的 SNAP 命令。Snap 命令將為那些將被隨機超時的人創建一個新列表,不會重復。這個新列表被計算為所有在聊天中發言的人的一半,四舍五入。它還說明了所有聊天 tmi 和您的聊天機器人中的 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)
將每個人都列在一個列表中,您也可以輕松取消對他們的封禁!
您的聊天機器人不能做的一些事情是超時版主并將您的聊天設置為僅表情模式。我希望我可以啟用僅表情模式,但我必須使用主播用戶名來實現。
步驟 5
我使用的是舊版本的 IRCClient,我對其進行了修改以用于 Twitch。如果您使用最新版本,它將開箱即可與 Twitch 一起使用。<>
首先要添加的是庫,定義我們的 wifi 網絡,以及傳遞給 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);
我們在這里調用我們的 wificlient 和我們的 ircclients,并列出適當的 twitch 端口。您的機器人、頻道名稱和密碼都是您需要更改的內容。
讓我們定義一些變量,這些變量將幫助我們在我們不想的時候不讓人們超時。
boolean snapboo = false;
boolean emoteboo = false;
?下一部分代碼用于 esp 32 中內置的觸摸傳感器。我們還創建了一個函數,該函數將在觸發快照時調用。
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;
}?
每次觸發快照時,它都會校準傳感器,通過比較時間間隔和觸發次數來檢查它是否是真正的觸摸。
?接下來讓我們創建我們的設置循環并附加我們的中斷。wifi 和客戶端也將開始。
void setup() {
WiFi.begin(ssid1, password1);
client.setCallback(callback);
client.setSentCallback(debugSentCallback);
touchAttachInterrupt(T7,gotTouch2,thresholdTwo);
}
?現在,在我們的主循環中,我們將把我們的信息傳遞給 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;
}
?我們將調用我們的回調函數來檢查 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");
}
}
}
?不幸的是,聊天機器人無法觸發僅表情模式,真可惜。
這些命令被我們的 python 腳本識別以啟動超時。
上面提到,我們分解了 twitch 消息,用于 ping/pong、用戶名、消息。
如果一個特定的單詞是由特定的用戶名(用戶名)寫的,那么解鎖快照或僅表情模式(我又很笨,聊天機器人無法觸發)。
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;
}
}
?最后,只需為客戶端設置調試。
void debugSentCallback(String data) {
//Serial.println("I am in debug");
Serial.println(data);
}
步驟 6
如何關閉你的構建并捕捉你的聊天!
不要忘記切一個洞,這樣你的手指就可以接觸到傳感器!?
文件
Snap_Glove.ino :ESP32 和 Arduino 的 Snap Glove 代碼
Thanos Twitch Bot.py :一個基本的 Twitch 機器人,它收集聊天中的所有用戶,將其中一半的用戶分段以超時,并在特定人員發送特定消息時將其超時缺少用于與 twitch 通信的 cfg 文件(它的密碼和其他)-> # cfg.pyHOST = "irc.twitch.tv" # Twitch IRC 服務器端口 = 6667 # 總是使用端口 6667!NICK = "twitch_username" # 你的 Twitch 用戶名,小寫 PASS = "oauth:xxxxxxxxxxxxxxxxxxxx " # 你的 Twitch OAuth tokenCHAN = "#channel" # 你想加入的頻道
?
- 用于可穿戴設備的感應式觸摸按鈕
- 可穿戴設備的電針活動應用簡介
- 用于便攜可穿戴設備的RX8130CE
- 2023可穿戴設備行業技術與市場分析 22次下載
- 可穿戴設備開源分享
- 癲癇發作預測可穿戴設備的深度學習
- 如何設計更加小巧、續航能力更強的可穿戴設備
- 可穿戴設備的設計方向與規范資料下載
- 可穿戴設備的電源方案探討資料下載
- 可穿戴設備中的電源管理技術資料下載
- ADI:可穿戴設備,醫院之外的健康衛士 1次下載
- 可穿戴設備和物聯網的系統設計與NOR閃存在可穿戴設備中的應用 7次下載
- 基于無線模塊的可穿戴設備的應用方案 3次下載
- 使用無線模塊構建可穿戴設備 9次下載
- 移動與可穿戴設備的解決方案 25次下載
- 醫療可穿戴設備的設計需求和解決方案 3408次閱讀
- 從可穿戴設備過渡到醫療設備 671次閱讀
- 可穿戴設備應用程序的實現 965次閱讀
- 可穿戴設備:滿足卓越電源管理的需求 897次閱讀
- 可穿戴設備發展歷程!醫療可穿戴設備和傳感器生態系統正在快速成長! 6647次閱讀
- 淺析Dialog可穿戴設備解決方案 4932次閱讀
- 如何設計一種可穿戴設備待機延長的方案 889次閱讀
- 關于可穿戴設備市場的調研報告 3111次閱讀
- MEMS六軸傳感器的可穿戴設備電路設計—電路精選(37) 4012次閱讀
- 可穿戴設備氧傳感器電路解析—電路精選(35) 4664次閱讀
- 醫療可穿戴設備:如何打開慢性病困惑的“黑箱” 1195次閱讀
- 醫療可穿戴設備的6大領頭羊,都是誰? 956次閱讀
- 可穿戴設備電源設計關鍵點解析 1764次閱讀
- 簡單有效的可穿戴設備ESD靜電防護原則 3076次閱讀
- 為什么可穿戴設備如此流行? 1131次閱讀
下載排行
本周
- 1人形機器人電機驅動和傳感報告
- 4.27 MB | 4次下載 | 免費
- 2GD100PIX120C6SNA規格書
- 0.98 MB | 3次下載 | 免費
- 3一款入耳式耳機的仿真與分析
- 0.44 MB | 2次下載 | 免費
- 4Eurotherm TKS Temperature 用戶手冊
- 1.46 MB | 2次下載 | 免費
- 524V2A開關電源PCB資料分享
- 0.23 MB | 2次下載 | 1 積分
- 6無線系統中天線和RF元件電磁建模
- 7.48 MB | 1次下載 | 4 積分
- 7Multisim模擬電路仿真教程
- 1.93 MB | 1次下載 | 3 積分
- 8Altium Designer元件庫
- 17.11 MB | 1次下載 | 免費
本月
- 1晶體三極管的電流放大作用詳細說明
- 0.77 MB | 32次下載 | 2 積分
- 2雙極型三極管放大電路的三種基本組態的學習課件免費下載
- 4.03 MB | 25次下載 | 1 積分
- 3AIWA HS-J303 MKⅡ維修手冊
- 22.47 MB | 24次下載 | 10 積分
- 4九陽豆漿機高清原理圖
- 2.47 MB | 22次下載 | 1 積分
- 5多級放大電路的學習課件免費下載
- 1.81 MB | 21次下載 | 2 積分
- 6AIWA HS-J202/HS-J202M/HS-J800維修手冊
- 13.60 MB | 16次下載 | 10 積分
- 71875功放原理圖
- 0.04 MB | 11次下載 | 免費
- 8單電源板1875電路圖
- 0.06 MB | 10次下載 | 免費
總榜
- 1matlab軟件下載入口
- 未知 | 935127次下載 | 10 積分
- 2開源硬件-PMP21529.1-4 開關降壓/升壓雙向直流/直流轉換器 PCB layout 設計
- 1.48MB | 420063次下載 | 10 積分
- 3Altium DXP2002下載入口
- 未知 | 233089次下載 | 10 積分
- 4電路仿真軟件multisim 10.0免費下載
- 340992 | 191382次下載 | 10 積分
- 5十天學會AVR單片機與C語言視頻教程 下載
- 158M | 183338次下載 | 10 積分
- 6labview8.5下載
- 未知 | 81585次下載 | 10 積分
- 7Keil工具MDK-Arm免費下載
- 0.02 MB | 73814次下載 | 10 積分
- 8LabVIEW 8.6下載
- 未知 | 65988次下載 | 10 積分
評論