【童心向党】党史学习机
## 前言历史是镜子,它可以折射过去,可以昭示未来。历史也是一部教科书,让我们在过去中得到经验和教育,为未来的发展做出准备。学习史党,让我们时刻不忘老一辈革命先烈的牺牲和奉献,也让我们更清楚地意识到自己身上的使命和任务。
作为祖国的下一代,要坚定信念、发奋学习、立志报国,从小事做起,从了解一个党史故事开始,从制作一个有关党史的科创项目开始,用党的精神鞭策自己,使自己不断进步,时刻做好接班人的准备!

## 视频演示
https://www.bilibili.com/video/bv1mB4y1M7Ei
## 硬件清单
| 序号 | 硬件名称 | 数量 |
| ---- | -------------- | ---- |
| 1 | 掌控板+掌控宝| 1 |
| 2 | MP3模块 | 1 |
| 3 | 声音传感器 | 1 |
| 4 | 激光切割亚克力 | 若干 |
## 电路连接

## 制作步骤
①用lasermaker设计该项目的模型

②:设计好的模型,进行激光切割

③:开始对切割好的模型进行组装





## blynk APP界面设计

## 程序编写
**初始化操作:**
1、设置wifi名称和密码,
2、设置blynk的授权码
3、定义RGB灯引脚
4、初始化MP3引脚
5、logo显示

**对blynk的音乐组件进行程序设计:**

**对灯带相关组件进行程序编写:**

**对党史文本框音乐选择进行程序编写**

```python
from mpython import *
import network
my_wifi = wifi()
my_wifi.connectWiFi('Erised', 'yiruosi88')
import ntptime
import blynklib
blynk = blynklib.Blynk('GJZQIuafyg4uL20GCZHcbWochaz8chqE', server='39.98.114.122', port=8080)
@blynk.handle_event("connect")
def connect_handler():
print('Blynk connected')
@blynk.handle_event("disconnect")
def connect_handler():
print('Blynk disconnected')
import neopixel
my_rgb = neopixel.NeoPixel(Pin(Pin.P13), n=15, bpp=3, timing=1)
from bluebit import *
import _thread
import framebuf
import font.digiface_44
@blynk.handle_event('write V0')
def write_virtual_pin_handler(pin, _value):
global year, state, j, i
for i in range(0, len(_value)):
try: _value = eval(_value)
except: pass
if len(_value) == 1: _value = _value
print(_value)
if _value == 'play':
mp3.play()
elif _value == 'stop':
mp3.pause()
elif _value == 'prev':
year = year + -1
mp3.playPrev()
oled.fill(0)
display_font(font.digiface_44, (str(year)), 8, 8, False, 2)
oled.show()
else:
mp3.playNext()
year = year + 1
oled.fill(0)
display_font(font.digiface_44, (str(year)), 8, 8, False, 2)
oled.show()
@blynk.handle_event('write V1')
def write_virtual_pin_handler(pin, _value):
global year, state, j, i
for i in range(0, len(_value)):
try: _value = eval(_value)
except: pass
if len(_value) == 1: _value = _value
my_rgb.brightness(_value / 100)
my_rgb.write()
@blynk.handle_event('write V2')
def write_virtual_pin_handler(pin, _value):
global year, state, j, i
for i in range(0, len(_value)):
try: _value = eval(_value)
except: pass
if len(_value) == 1: _value = _value
print(_value)
print(_value)
for j in range(15):
my_rgb = (_value, _value, _value)
my_rgb.write()
@blynk.handle_event('write V3')
def write_virtual_pin_handler(pin, _value):
global year, state, j, i
for i in range(0, len(_value)):
try: _value = eval(_value)
except: pass
if len(_value) == 1: _value = _value
if _value == 1:
for i in range(15):
my_rgb = (255, 0, 0)
my_rgb.write()
else:
my_rgb.fill( (0, 0, 0) )
my_rgb.write()
my_rgb.write()
p0 = MPythonPin(0, PinMode.ANALOG)
def make_rainbow(_neopixel, _num, _bright, _offset):
_rgb = ((255,0,0), (255,127,0), (255,255,0), (0,255,0), (0,255,255), (0,0,255), (136,0,255), (255,0,0))
for i in range(_num):
t = 7 * i / _num
t0 = int(t)
r = round((_rgb + (t-t0)*(_rgb-_rgb))*_bright)>>8
g = round((_rgb + (t-t0)*(_rgb-_rgb))*_bright)>>8
b = round((_rgb + (t-t0)*(_rgb-_rgb))*_bright)>>8
_neopixel[(i + _offset) % _num] = (r, g, b)
@blynk.handle_event('write V4')
def write_virtual_pin_handler(pin, _value):
global year, state, j, i
for i in range(0, len(_value)):
try: _value = eval(_value)
except: pass
if len(_value) == 1: _value = _value
print(_value)
mp3.volume = _value
@blynk.handle_event('write V5')
def write_virtual_pin_handler(pin, _value):
global year, state, j, i
for i in range(0, len(_value)):
try: _value = eval(_value)
except: pass
if len(_value) == 1: _value = _value
print(_value)
year = _value
mp3.play_song((_value - 1919))
oled.fill(0)
display_font(font.digiface_44, (str(_value)), 8, 8, False, 2)
oled.show()
mp3 = MP3(Pin.P16)
image_picture = Image()
def display_font(_font, _str, _x, _y, _wrap, _z=0):
_start = _x
for _c in _str:
_d = _font.get_ch(_c)
if _wrap and _x > 128 - _d: _x = _start; _y += _d
if _c == '1' and _z > 0: oled.fill_rect(_x, _y, _d, _d, 0)
oled.blit(framebuf.FrameBuffer(bytearray(_d), _d, _d,
framebuf.MONO_HLSB), (_x+int(_d/_z)) if _c=='1' and _z>0 else _x, _y)
_x += _d
def thread_1():
global year, state, j, i
while True:
if state == 1:
make_rainbow(my_rgb, 15, ((p0.read_analog() + 1) / 40.96), 1)
my_rgb.write()
else:
pass
ntptime.settime(8, "time.windows.com")
my_rgb.brightness(50 / 100)
my_rgb.write()
mp3.volume = 15
oled.fill(0)
oled.blit(image_picture.load('one.bmp', 0), (-5), 0)
oled.show()
state = 0
year = 0
_thread.start_new_thread(thread_1, ())
while True:
blynk.run()
```
##总结
这样子,我们的党史学习机就做好了!在制作过程中遇到了一些问题:
**Q**:在下载党史音乐的时候,如果批量下载网页中的音频文件?
**A**:我们利用python的知识进行了网页批量的下载,具体教程详情:(https://mp.weixin.qq.com/s?__biz=MzkwNzIwMDk2OA==&mid=2247483913&idx=1&sn=e18cd05f015c70d298457ba5ff961ad5&chksm=c0dd92aef7aa1bb8841018521279e43ccb763803275e130fac749247d2a57980007c30af3bd4&token=540008911&lang=zh_CN#rd)
**Q**在设计进行党史音乐选取的时候:导入SD卡文件不能安照文件命名顺序播放?
**A**我们需要先在电脑端进行排序,然后全选复制到SD卡内。问题就解决啦!
更多项目教程欢迎订阅个人博客:**www.hockel.club**
微信公众号:**跟着hockel玩科创**
 豪华版啊 安卓机器人 发表于 2021-6-25 19:44
豪华版啊
见笑了{:5_125:} 不不不不不不 太漂亮了! 红心向党 多大功率的光雕 你好,请问一下,你的这个外观有源文件吗?我做了类似的,想用下你的外观修改一下
我是一名小学信息技术教师,想多跟你交流,timber_123这是我的微信,可否加一下。
页:
[1]