Skip to content
切换导航条
切换导航条
当前项目
正在载入...
登录
董杰
/
SmartShelf-raspberry
转到一个项目
切换导航栏
切换导航栏固定状态
项目
群组
代码片段
帮助
项目
活动
版本库
流水线
图表
问题
0
合并请求
0
维基
网络
创建新的问题
作业
提交
问题看板
文件
提交
网络
比较
分支
标签
Commit 2e33aa18
由
董杰
编写于
2021-04-19 16:55:56 +0800
浏览文件
选项
浏览文件
标签
下载
电子邮件补丁
差异文件
1.增加一个状态灯,双面三色灯兼容,2.增加选择库位打印二维码功能
1 个父辈
faf29547
显示空白字符变更
内嵌
并排
正在显示
4 个修改的文件
包含
137 行增加
和
8 行删除
smartshelf/app/__init__.py
smartshelf/app/qr_code.py
smartshelf/app/routes.py
smartshelf/app/templates/ledtest.html
smartshelf/app/__init__.py
查看文件 @
2e33aa1
...
...
@@ -34,5 +34,5 @@ def get_locale():
return
request
.
accept_languages
.
best_match
(
LANGUAGES
.
keys
())
from
app
import
routes
,
post
,
led_strip
,
driver_gpio
,
autoback
from
app
import
routes
,
post
,
led_strip
,
driver_gpio
,
autoback
,
qr_code
# return app
\ No newline at end of file
smartshelf/app/qr_code.py
0 → 100644
查看文件 @
2e33aa1
import
os
import
sys
import
qrcode
# from PIL import Image
from
PIL
import
Image
,
ImageDraw
,
ImageFont
,
ImageFilter
import
numpy
from
app
import
app
from
flask
import
jsonify
,
render_template
,
request
,
send_from_directory
import
matplotlib.font_manager
as
fm
import
logging
code_path
=
'/prog/smartshelf/app/static/uploads'
def
make_qrcode
(
file_code
):
# for line in all_data:
# A_NUMBER = line[0]
# c_start = int(line[1])
# c_stop = int(line[2])
# dirs_str = deal_line_code(project_number,A_NUMBER,c_start,c_stop)
# resize(project_number,dirs_str)
# current_path_file=os.path.join(code_path,t_file)
qr
=
qrcode
.
QRCode
(
version
=
1
,
error_correction
=
qrcode
.
constants
.
ERROR_CORRECT_L
,
box_size
=
10
,
border
=
0
)
qr
.
add_data
(
file_code
)
qr
.
make
(
fit
=
True
)
img
=
qr
.
make_image
()
file
=
"{}/{}.png"
.
format
(
code_path
,
file_code
)
img
.
save
(
file
)
# img1.save("./{}_qr_jpg/{}/{}.jpg".format(project_number,dirs_str,filename[:-4]))
return
True
def
resize
(
file_code
):
# path = './{}_qr_png/{}'.format(project_number,dirs_str)
# path_list = os.listdir(path)
img1
=
Image
.
open
(
"{}/{}.png"
.
format
(
code_path
,
file_code
))
# img1 = Image.open("E:/qr_png/code/0/{}.png".format(filename))
img1
=
img1
.
resize
((
300
,
300
),
Image
.
ANTIALIAS
)
# print (filename[:-4])
img1
.
save
(
"{}/{}.jpg"
.
format
(
code_path
,
file_code
))
def
deal_number
(
file_code
):
print
(
file_code
)
color
=
"White"
img_str
=
Image
.
new
(
"RGB"
,(
480
,
90
),
color
)
img_str
.
save
(
"{}/temp_number.jpg"
.
format
(
code_path
))
im
=
Image
.
open
(
"{}/temp_number.jpg"
.
format
(
code_path
))
# font = ImageFont.truetype('simsun.ttc',55)
# font = ImageFont.truetype(fm.findfont(fm.FontProperties(family='DejaVu Sans')),63)
if
os
.
path
.
isfile
(
"/usr/share/fonts/truetype/dejavu/simsun.ttf"
):
font
=
ImageFont
.
truetype
(
"/usr/share/fonts/truetype/dejavu/simsun.ttf"
,
75
)
draw
=
ImageDraw
.
Draw
(
im
)
draw
.
text
((
50
,
20
),
file_code
,
font
=
font
,
fill
=
'#000'
)
else
:
font
=
ImageFont
.
truetype
(
fm
.
findfont
(
fm
.
FontProperties
(
family
=
'DejaVu Sans'
)),
75
)
draw
=
ImageDraw
.
Draw
(
im
)
draw
.
text
((
30
,
20
),
file_code
,
font
=
font
,
fill
=
'#000'
)
# draw.text((60,13), filename, font=font, fill='#000') #602项目改动
im
.
save
(
"{}/temp_number.jpg"
.
format
(
code_path
))
def
paste
(
file_code
):
color
=
'white'
target
=
Image
.
new
(
"RGB"
,(
300
,
390
),
color
)
# qr = Image.open("E:/qr_png/jpg_code/B/{}".format(filename))
# qr = Image.open("E:/code_tool/{}/{}/{}.jpg".format(source_path,path_str,filename))
qr
=
Image
.
open
(
'{}/{}.jpg'
.
format
(
code_path
,
file_code
))
im
=
Image
.
open
(
'{}/temp_number.jpg'
.
format
(
code_path
))
a
=
0
# 图片距离左边的大小
b
=
0
# 图片距离上边的大小
c
=
300
# 图片距离左边的大小 + 图片自身宽度
d
=
300
# 图片距离上边的大小 + 图片自身高度
target
.
paste
(
qr
,
(
a
,
b
,
c
,
d
))
e
=
0
f
=
300
# target.paste(im, (e, f))
target
.
save
(
"{}/code_img_str.jpg"
.
format
(
code_path
))
targeta
=
Image
.
new
(
"RGB"
,(
480
,
480
),
color
)
targetb
=
Image
.
open
(
"{}/code_img_str.jpg"
.
format
(
code_path
))
targeta
.
paste
(
targetb
,
(
90
,
60
))
targeta
.
paste
(
im
,
(
0
,
360
))
targeta
.
save
(
"{}/{}.jpg"
.
format
(
code_path
,
file_code
))
logging
.
warning
(
"库位二维码生成成功:{}"
.
format
(
file_code
))
@app.route
(
'/downqrcode/'
,
methods
=
[
'GET'
,
'POST'
],
strict_slashes
=
False
)
def
downqrcode
():
# file_code = '001-01-001'
file_code
=
str
(
request
.
args
.
get
(
"code"
))
make_qrcode
(
file_code
)
resize
(
file_code
)
deal_number
(
file_code
)
paste
(
file_code
)
c_path
=
'/prog/smartshelf/app/static/uploads/'
filename
=
'{}.jpg'
.
format
(
file_code
)
if
request
.
method
==
"GET"
:
if
os
.
path
.
isfile
(
os
.
path
.
join
(
c_path
,
filename
)):
return
send_from_directory
(
c_path
,
filename
,
as_attachment
=
True
)
\ No newline at end of file
smartshelf/app/routes.py
查看文件 @
2e33aa1
...
...
@@ -15,6 +15,7 @@ from rpi_ws281x import Adafruit_NeoPixel, Color,PixelStrip
from
app
import
app
,
babel
# from app import socketio
from
app.led_strip
import
get_strip
from
app
import
driver_gpio
import
logging
import
RPi.GPIO
as
GPIO
from
flask_babel
import
Babel
,
gettext
as
_
...
...
@@ -49,7 +50,7 @@ try:
except
Exception
as
e
:
logging
.
warning
(
"配置文件加载失败,请上传配置文件"
)
config_state
=
'加载失败,请在配置页面上传配置文件'
SET_CHANNEL
=
{
'greenA'
:
5
,
'
redA'
:
6
,
'greenB'
:
17
,
'redB'
:
27
}
SET_CHANNEL
=
{
'greenA'
:
5
,
'
yellowA'
:
6
,
'redA'
:
16
,
'greenB'
:
17
,
'yellowB'
:
27
,
'redB'
:
23
}
SET_LED_CHANNEL
=
{
'1'
:
12
,
'2'
:
21
}
led_lights1
=
{}
...
...
@@ -94,16 +95,22 @@ def workinglight():
if
channel
==
'channel1'
:
if
color
==
'green'
:
pin
=
SET_CHANNEL
[
'greenA'
]
elif
color
==
'yellow'
:
pin
=
SET_CHANNEL
[
'yellowA'
]
else
:
pin
=
SET_CHANNEL
[
'redA'
]
else
:
if
color
==
'green'
:
pin
=
SET_CHANNEL
[
'greenB'
]
elif
color
==
'yellow'
:
pin
=
SET_CHANNEL
[
'yellowB'
]
else
:
pin
=
SET_CHANNEL
[
'redB'
]
GPIO
.
setmode
(
GPIO
.
BCM
)
GPIO
.
setup
(
pin
,
GPIO
.
OUT
)
GPIO
.
output
(
pin
,
GPIO
.
HIGH
)
# GPIO.setmode(GPIO.BCM)
# GPIO.setup(pin,GPIO.OUT)
# GPIO.output(pin,GPIO.HIGH)
driver_gpio
.
init
(
pin
)
driver_gpio
.
gpio_high
(
pin
)
msg
=
"通道:{};状态灯{}点亮"
.
format
(
channel
,
color
)
logging
.
warning
(
msg
)
info
=
[]
...
...
@@ -119,16 +126,22 @@ def workingoff():
if
channel
==
'channel1'
:
if
color
==
'green'
:
pin
=
SET_CHANNEL
[
'greenA'
]
elif
color
==
'yellow'
:
pin
=
SET_CHANNEL
[
'yellowA'
]
else
:
pin
=
SET_CHANNEL
[
'redA'
]
else
:
if
color
==
'green'
:
pin
=
SET_CHANNEL
[
'greenB'
]
elif
color
==
'yellow'
:
pin
=
SET_CHANNEL
[
'yellowB'
]
else
:
pin
=
SET_CHANNEL
[
'redB'
]
GPIO
.
setmode
(
GPIO
.
BCM
)
GPIO
.
setup
(
pin
,
GPIO
.
OUT
)
GPIO
.
output
(
pin
,
GPIO
.
LOW
)
# GPIO.setmode(GPIO.BCM)
# GPIO.setup(pin,GPIO.OUT)
# GPIO.output(pin,GPIO.LOW)
driver_gpio
.
init
(
pin
)
driver_gpio
.
gpio_low
(
pin
)
msg
=
"通道:{};状态灯{}关闭"
.
format
(
channel
,
color
)
logging
.
warning
(
msg
)
info
=
[]
...
...
smartshelf/app/templates/ledtest.html
查看文件 @
2e33aa1
...
...
@@ -118,6 +118,7 @@
<div
class=
"col-sm-3"
>
<select
id=
'workcolor'
class=
"form-control"
>
<option>
green
</option>
<option>
yellow
</option>
<option>
red
</option>
</select>
</div>
...
...
@@ -127,6 +128,27 @@
</div>
<!-- /.col-sm-4 -->
</div>
</div>
<div
class=
"panel panel-success"
>
<div
class=
"panel-heading"
>
<h3
class=
"panel-title"
>
{{ _('下载库位二维码') }}
</h3>
</div>
<div
class=
"panel-body"
>
<form
action=
"/downqrcode"
method=
"GET"
>
<div
class=
"col-sm-3"
>
<select
name=
"code"
class=
"form-control"
>
{% for optionv in option_list %}
<option>
{{ optionv }}
</option>
{% endfor %}
</select>
</div>
<div
class=
"col-sm-3"
>
<input
type=
"submit"
class=
"btn btn-info"
value=
{{
_
('下载二维码')
}}
>
</div>
<label
for=
"cha11"
class=
"col-sm-4"
>
{{ _('单个二维码尺寸(含白色底框)尺寸为16*16mm,黑码尺寸为10*10mm') }}
</label>
</form>
</div>
</div>
</div>
<div
class=
"col-md-6"
>
<h2>
{{ _('运行日志
&
状态信息') }}
</h2>
...
...
编写
预览
支持
Markdown
格式
附加文件
你添加了
0
人
到此讨论。请谨慎行事。
Finish editing this message first!
Cancel
请
注册
或
登录
后发表评论