Python 电路绘制库 schemdraw 你会吗?面试必学

Posted 程序员的人生A

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python 电路绘制库 schemdraw 你会吗?面试必学相关的知识,希望对你有一定的参考价值。

 

前言
本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理。
作者:skyztttt


引子

由于最近在学习ardunio的使用,其中牵涉到绘制一些简单的电路图,又不愿意使用一些复杂的软件进行绘制,调查中发现python中的schemdraw库就能很好地完成这个任务,遂学习使用之。如果你还没学到Python绘制库,建议你先去小编的Python学习.裙 :一久武其而而流一思(数字的谐音)转换下可以找到了,里面有最新Python教程项目,多跟里面的大佬请教交流进步更快哦

schemdraw的安装

pip install schemdraw搞定,不赘言

正式使用

参考网站及示例

附上相关的网站: 
https://pypi.python.org/pypi/SchemDraw/ 
https://cdelker.bitbucket.io/SchemDraw/SchemDraw.html 
https://www.zhihu.com/question/23632588 (知乎上对这个库及同类方式的介绍) 
schemdraw官方文档中有这么个例子,和我们的用法比较类似遂拆解学习之。

d = schem.Drawing()
left = {\'cnt\':3,
        \'labels\':[\'TRG\',\'THR\',\'DIS\'],
        \'plabels\':[\'2\',\'6\',\'7\'],
        \'loc\':[.2,.35,.75],
        \'lblsize\':12,
        }
right = {\'cnt\':2,
         \'labels\':[\'CTL\',\'OUT\'],
         \'plabels\':[\'5\',\'3\'],
        \'lblsize\':12,
         }
top = {\'cnt\':2,
       \'labels\':[\'RST\',\'Vcc\'],
       \'plabels\':[\'4\',\'8\'],
       \'lblsize\':12,
       }
bot = {\'cnt\':1,
       \'labels\':[\'GND\'],
       \'plabels\':[\'1\'],
       \'lblsize\':12,
        }

IC555 = e.blackbox(d.unit*1.5, d.unit*2.25, 
                   linputs=left, rinputs=right, tinputs=top, binputs=bot,
                   leadlen=1, mainlabel=\'555\')
T = d.add(IC555)
BOT = d.add(e.GND, xy=T.GND)  # Note: Anchors named same as pin labels
d.add(e.DOT)
d.add(e.RES, endpts=[T.DIS, T.THR], label=\'Rb\')
d.add(e.RES, d=\'up\', xy=T.DIS, label=\'Ra\', rgtlabel=\'+Vcc\')
d.add(e.LINE, endpts=[T.THR, T.TRG])
d.add(e.CAP, xy=T.TRG, d=\'down\', toy=BOT.start, label=\'C\', l=d.unit/2)
d.add(e.LINE, d=\'right\', tox=BOT.start)
d.add(e.CAP, d=\'down\', xy=T.CTL, toy=BOT.start, botlabel=\'.01$\\mu$F\')
d.add(e.DOT)
d.add(e.DOT, xy=T.DIS)
d.add(e.DOT, xy=T.THR)
d.add(e.DOT, xy=T.TRG)
d.add(e.LINE, endpts=[T.RST,T.Vcc])
d.add(e.DOT)
d.add(e.LINE, d=\'up\', l=d.unit/4, rgtlabel=\'+Vcc\')
d.add(e.RES, xy=T.OUT, d=\'right\', label=\'330\')
d.add(e.LED, flip=True, d=\'down\', toy=BOT.start)
d.add(e.LINE, d=\'left\', tox=BOT.start)
d.draw()

上效果图: 
这里写图片描述

根据示例自己动手绘制

先绘制arduino主板

import SchemDraw as schem
import SchemDraw.elements as e
d = schem.Drawing()
left = {\'cnt\':10,
        \'labels\':[\'RESET\',\'RESET2\',\'AREF\',\'N/C\',\'A0\',\'A1\',\'A2\',\'A3\',\'A4/SDA\',\'A5/SCL\'],
        \'plabels\':[\'2\',\'6\',\'7\'],
        \'lblsize\':12,
        }
right = {\'cnt\':17,
         \'labels\':[\'TX/D0\',\'RX/D1\',\'D2\',\'PWM D3\',\'D4\',\'PWM D5\',\'PWM D6\',\'D7\',\'D8\',\'PWM D9\',\'SS/PWM D10\',\'MOSI/PWM D11\',\'MISO/D12\',\'SCK/D13\',\'ICSP2 MISO\',\'ICSP2 SCK\',\'ICSP MISO\'],
         \'plabels\':[\'5\',\'3\'],
        \'lblsize\':12,
         }
top = {\'cnt\':3,
       \'labels\':[\'3v3\',\'5v\',\'VIN\'],
       \'plabels\':[\'4\',\'8\'],
       \'lblsize\':12,
       }
bot = {\'cnt\':1,
       \'labels\':[\'GND\'],
       \'lblsize\':12,
        }

IC555 = e.blackbox(d.unit*2.5, d.unit*4.5, 
                   linputs=left, rinputs=right, tinputs=top, binputs=bot,
                   leadlen=1, mainlabel=\'Arduino\\nUno\\n(Rev3)\')
T = d.add(IC555)

d.draw()

效果图: 
这里写图片描述

注意点

  • 元件的端点一般采用原件label进行查找,但是一些特殊字符schemdraw会将其略去,此外以数字开头的端点不能使用直接[原件.label名]获取(python语法不允许,必须采用getattr,如:getattr(T, ‘5v’))另外如果你Python学的不是很好, 建议你先去小编的Python学习.裙 :一久武其而而流一思(数字的谐音)转换下可以找到了,里面有最新Python教程项目,多跟里面的大佬请教交流进步更快哦
    此外元件端点也可以通过调试器来查看。 
    这里写图片描述
  • 绘制一般比较简单不指定连接的端点则采用上一次绘制的终点绘制: 
    一般通过e.LINE,e.DOT绘制线和点(d=’up’,l=d.unit*0.3 控制方向和长度,tox、toy控制到达某个水平/竖直位置)
  • 整体来说还比较简单,需要主要整体思路是画出单个元器件,然后使用线进行连接(之前本人绘制电位器时认为可以直接连接电位器的中间端到另一个端点,走了比较多的弯路) 
    最后附上绘制的一个简单的电路图,
    这里写图片描述
 

以上是关于Python 电路绘制库 schemdraw 你会吗?面试必学的主要内容,如果未能解决你的问题,请参考以下文章

用 Python 绘制几张有趣的可视化图表

8种必知pcb电路原理图的绘制方法,你会吗?

抄电路板时为啥要先绘制pcb图而不是先绘制原理图

Altium Designer绘制STM32+W5500的电路原理图

实验一 电路原理图的绘制

实验一 电路原理图的绘制