#戦士の銃 電飾用コード
# ver.0.2
# Last update 2024/3/17
# 仕様
# Rasppi 本体のスイッチを押すと銃口LEDが発光し、射撃音が鳴る
# LED制御仕様
import time
import network
import socket
#import machine
from machine import Pin, PWM
from dfplayer import DFPlayer
# DFPlayer
df=DFPlayer(uart_id=1,tx_pin_id=4,rx_pin_id=5)
#wait some time till the DFPlayer is ready
time.sleep(0.1)
#change the volume (0-30). The DFPlayer doesn't remember these settings
df.volume(20)
#time.sleep(0.2)
#play file ./01/001.mp3
#df.play(1,1)
#銃口パラメタ
led = PWM(Pin(16))
#led.freq(50)
led.freq(1000)
#MAX_LED_DUTY = 100
#PWM出力のDUTY比初期値を設定(デフォルト:0% = 消灯状態)
led_duty = 0
led.duty_u16(0)
ledState = 'LED State Unknown'
#自宅Wi-FiのSSIDとパスワードを入力
ssid = 'fairy506'
#ssid = 'fairy503'
password = '11EF7B93B2CF68A3495E4D42E3'
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
wlan.connect(ssid, password)
html = """<!DOCTYPE html><html lang="ja">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="icon" href="data:,">
<style>html { font-family:'Meiryo'; display: inline-block; margin: 0px auto; text-align: center;}
.buttonGreen { background-color: #4CAF50; border: 2px solid #000000;; color: white; padding: 15px 32px; text-align: center; text-decoration: none; display: inline-block; font-size: 16px; margin: 4px 2px; cursor: pointer; }
.buttonRed { background-color: #D11D53; border: 2px solid #000000;; color: white; padding: 15px 32px; text-align: center; text-decoration: none; display: inline-block; font-size: 16px; margin: 4px 2px; cursor: pointer; }
text-decoration: none; font-size: 30px; margin: 2px; cursor: pointer;}
</style></head>
<body><center><h1>戦士の銃</h1></center><br>
<p style="position: relative;">
<img src="https://image.armsweb.jp/thumbnail/fs_files/max610x/images/2021113011053061a586ea73132.jpg" alt="戦士の銃" title="戦士の銃">
</p>
<form><center>
<table border="1">
<th colspan="2">射撃</th><th colspan="2">その他</th>
</tr>
<td><button class="buttonGreen" name="shoot_w_energy" value="on" type="submit">射撃</button></td>
<td><button class="buttonGreen" name="shoot_wo_energy" value="on" type="submit">空撃</button></td>
<td><button class="buttonGreen" name="Red_Alert_on" value="on" type="submit">エネルギー切れ</button></td>
<td><button class="buttonGreen" name="shoot_wo_energy" value="on" type="submit">リチャージ音</button></td>
</tr>
</table>
</form>
<br><br>
<p>%s<p></body></html>
"""
# Wait for connect or fail
max_wait = 15
while max_wait > 0:
if wlan.status() < 0 or wlan.status() >= 3:
break
max_wait -= 1
print('waiting for connection...')
time.sleep(1)
# Handle connection error
if wlan.status() != 3:
raise RuntimeError('network connection failed')
else:
print('Connected')
status = wlan.ifconfig()
print( 'ip = ' + status[0] )
# Open socket
addr = socket.getaddrinfo('0.0.0.0', 80)[0][-1]
s = socket.socket()
s.bind(addr)
s.listen(1)
print('listening on', addr)
# Listen for connections, serve client
while True:
try:
cl, addr = s.accept()
print('client connected from', addr)
request = cl.recv(1024)
print("request:")
print(request)
request = str(request)
led_on = request.find('led=on')
led_off = request.find('led=off')
shoot_w_energy = request.find('shoot_w_energy=on')
shoot_wo_energy = request.find('shoot_wo_energy=on')
Red_Alert_on = request.find('Red_Alert_on=on')
print( 'shoot_w_energy on = ' + str(shoot_w_energy))
print( 'shoot_wo_energy = ' + str(shoot_wo_energy))
print( 'Red_Alert on = ' + str(Red_Alert_on))
#第一砲塔
#第二格納庫 開閉
if shoot_w_energy == 8:
df.play(99,1)
#time.sleep(0.1)
for i in range(0, 40000,+2):
led.duty_u16(i)
#time.sleep_us(5)
led.duty_u16(65535)
time.sleep(1.5)
for i in range(65535, 0, -2):
led.duty_u16(i)
#time.sleep_us(10)
#time.sleep(1)
if shoot_wo_energy == 8:
df.play(2,2)
if Red_Alert_on == 8:
df.play(3,1)
# Create and send response
stateis = ledState
response = html % stateis
cl.send('HTTP/1.0 200 OK\r\nContent-type: text/html\r\n\r\n')
cl.send(response)
cl.close()
except OSError as e:
cl.close()
print('connection closed')