基于树莓派的泛在物联网云打印关键技术研究

2019-06-30 00:20:00 15点赞 56收藏 8评论


摘要

4代出来了,心动,却没有行动。我已有3B+,购于淘宝,裸板回来自己按需配置。看到4代评论里有人说不知道拿来干什么,我就诞生了写这篇文不对题的想法。

研究背景

树莓派是个低功耗、小成本的计算机,能做许多事,不一定都能做好,但真的实现成本很低。如果真不知道拿来干什么,你无视就好了,说明没有需求。

树莓派诞生之初,我就关注它,为什么直到3代才出手,因为此前没有需求。孩子上小学了,家里配置一台打印机是必须的。没有经过太多调研,匆忙购买了HP LaserJet Pro M104w,简单够用。我和老婆经常出差,家里只有老人的时候,这款机子的远程打印功能就显得很实用了。但好景不长,惠普的云打印停止支持手机上的HP ePrint应用,新的HP Smart 应用代之以Print Anywhere功能却不支持我买的这款,只能通过往@hpeprint.com邮箱发邮件的方式打印。出差或在路上要给孩子打作业时极为不便。

其实这都能忍,但又遇到了新问题:本地经常无法打印,有老外反映是win10下无线打印端口的问题。叔能忍、婶不能忍,终于下定决心换掉,遂通过亚马逊海外购入手Brother HL-L2370DN,看中的是支持双面打印和有线网络。Brother借助谷歌云打印实现远程打印,此时我想到了用树莓派做打印服务器,自己实现远程打印。

惠普(HP)M104w黑白激光打印机 无线A4打印 P1108/1106+wifi 家用 小型办公899元京东去购买兄弟 HL-L2370DN 单色激光打印机 A 4 打印,双面打印与网络HL-L2370DN HL-L2370DN Printer With Start Up Toner亚马逊中国去购买


研究内容

1. 在树莓派上安装CUPS,驱动我选了相近的Brother HL-L2250DN。

此处略去……字

基于树莓派的泛在物联网云打印关键技术研究

2. 树莓派上开sftp服务

略去此处……字

基于树莓派的泛在物联网云打印关键技术研究

3. 问宽带客服要公网IP,注册DDNS(我选的是华硕路由器自带的asuscomm.com),并设置端口转发。

再次略去……字

基于树莓派的泛在物联网云打印关键技术研究

4. 咳咳,重点来了,《24小时Python从入门到精通》,在写这本书前我先拼凑了如下代码:

#!/usr/bin/python

#coding=utf-8

import os

import paramiko

import Image

import cups

import time

import subprocess


hostname = ['114.114.114.114','61.134.1.4']

response = [0, 0, 0]

server = '192.168.2.1'

port = 22

username = 'admin'

password = 'password'

command = 'reboot'

paramiko.util.log_to_file('paramiko.log')


conn = cups.Connection()

printers = conn.getPrinters()

printer_name = printers.keys()[0]

option = [{}, {}, {}]

option[0] = {'fit-to-page': 'True','orientation-requested': '3', 'sides': 'one-sided'}

option[1] = {'fit-to-page': 'True','orientation-requested': '4', 'sides': 'one-sided'}

option[2] = {'fit-to-page': 'True','orientation-requested': '3', 'sides': 'two-sided-short-edge'}

path = ['', '']

path[0] = '/home/pi/print_s/'

path[1] = '/home/pi/print_d/'



while True:

time.sleep(300)

while True:

response[2] = os.system('ping -c 1 ' + server)

if response[2] != 0:

time.sleep(150)

else:

break

response[0] = os.system('ping -c 1 ' + hostname[0])

response[1] = os.system('ping -c 1 ' + hostname[1])

if response[0] != 0 and response[1] != 0:

ssh = paramiko.SSHClient()

ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())

try:

ssh.connect(server, port, username, password)

stdin, stdout, stderr = ssh.exec_command(command)

stdin.write('Y')

finally:

ssh.close()


file_list = os.listdir(path[0])

for i in range(len(file_list)):

filename = os.path.splitext(file_list[i])

if filename[1] in ('.pdf', '.jpg', '.png'):

printerQueueLen = len(conn.getJobs())

if printerQueueLen <= 1:

time.sleep(1)

if filename[1] in ('.jpg','.png'):

im = Image.open(path[0] +file_list[i])

if im.width > im.height:

printID =conn.printFile(printer_name, path[0] + file_list[i], 'pi',option[1])

else:

printID =conn.printFile(printer_name, path[0] + file_list[i], 'pi',option[0])

else:

printID =conn.printFile(printer_name, path[0] + file_list[i], 'pi',option[0])

if printID > 0:

os.remove(path[0] +file_list[i])

file_list = os.listdir(path[1])

for i in range(len(file_list)):

filename = os.path.splitext(file_list[i])

if filename[1] == '.pdf':

printerQueueLen = len(conn.getJobs())

if printerQueueLen <= 1:

time.sleep(1)

printID = conn.printFile(printer_name,path[1] + file_list[i], 'pi', option[2])

if printID > 0:

os.remove(path[1] +file_list[i])

我不是程序猿,我同样讨厌写文档、写注释:

// 定时扫目录打印并清空。

// 中间有一段代码是用来重启路由器的。我在AC68U设置里找遍了都没找到自动重启的菜单项,直到买入AC86U后才发现有,此前我还买了个智能开关定时重启路由。AC68U丢去做AiMesh节点了,不管它有没有了。

// 以上代码除了路由器的用户名和密码外,都是在运代码内容,各位可以稍加修改就运用。

// 比较笨的办法,手机qq或微信布置作业了,用Total Commander的sftp插件传到树莓派上。

// 当然,用远程桌面登录树莓派打印功能更为强大,如word文档的打印,但这是另一个话题。

// 嗯,别忘了将python .py &加入/etc/rc.local启动。

// 友提:Python是空格敏感的。


研究结论

1. 树莓派能够实现云打印功能。把打印机与小学生作业时空互联,从而实现了泛在物联。

2. 适合自己的就是好的。走有自己特色的路,让别人也有路可走。

3. 由需求产生的项目才是好项目。



展开 收起
8评论

  • 精彩
  • 最新
  • 在值得买上,你甚至能看到论文。

    校验提示文案

    提交
    小编是审稿人,你们也是研究人员。

    校验提示文案

    提交
    收起所有回复
  • 感觉有点大炮打蚊子的感觉

    校验提示文案

    提交
    是呀,通用型产品来干这些特定的事其实是最省钱的。

    校验提示文案

    提交
    收起所有回复
  • 一看标题就是写过论文

    校验提示文案

    提交
    现在论文批产套路化

    校验提示文案

    提交
    收起所有回复
  • 🤣华硕路由支持连接打印机,把打印机的usb插路由就行

    校验提示文案

    提交
  • 评论,此处省掉……字

    校验提示文案

    提交
提示信息

取消
确认
评论举报

相关文章推荐

更多精彩文章
更多精彩文章
最新文章 热门文章
56
扫一下,分享更方便,购买更轻松