Skip to content
Snippets Groups Projects
Commit a14f8f5d authored by Jingyan Ling's avatar Jingyan Ling
Browse files

arrange repo

parent 0154cc9d
Branches
No related merge requests found
#!/usr/bin/env python3
"""
python 3.6.8
"""
import skidl
import csv
import os
import pcbnew
from pykicad import pcb
from pykicad import module
import numpy as np
from pcb_dxf_importer import importer
class schematic():
def __init__(self,lib_path):
skidl.lib_search_paths['kicad'].append(lib_path)
## load symbol of all parts
self.esp8826=skidl.Part('ESP8266','NodeMCU_1.0_',footprint='ESP8266:ESP12F-Devkit-V3')
self.mpu9250=skidl.Part('ESP8266','MPU-9250',footprint='ESP8266:mpu-9250')
self.resistor1=skidl.Part('ESP8266','1000',value='1K',footprint='Resistor_SMD:R_0402_1005Metric',ref='R1')
self.resistor2=skidl.Part('ESP8266','1000',value='1K',footprint='Resistor_SMD:R_0402_1005Metric',ref='R2')
self.connect_pins()
skidl.generate_netlist()
def connect_pins(self):
v33=skidl.Net('3v3')
v5=skidl.Net('VIN')
gnd=skidl.Net('GND')
self.resistor1[1]+=v33
self.resistor2[1]+=v33
v5+=self.esp8826['VIN']
v33+=self.esp8826['3.3v']
gnd+=self.esp8826['GND']
self.esp8826['D5']+=self.resistor1[2]
self.esp8826['D6']+=self.resistor2[2]
self.mpu9250['SDA']+=self.resistor1[2]
self.mpu9250['SCL']+=self.resistor2[2]
self.mpu9250['GND']+=gnd
self.mpu9250['VCC']+=v33
skidl.ERC()
class pcb_editor():
def __init__(self,lib_path):
os.environ["MODULE_SEARCH_PATH"]=lib_path
self.save_name='kicad_board'
self.dxf_name='kicad_test.dxf'
self.load_module()
self.place_module()
self.build_netlist()
self.draw_pcb()
self.pcb_collect()
def load_module(self):
self.esp8266=module.Module.from_library('ESP8266','ESP12F-Devkit-V3')
self.esp8266.set_reference('U1')
self.mpu9250=module.Module.from_library('ESP8266','mpu-9250')
self.mpu9250.set_reference('J1')
def place_module(self):
self.esp8266.at=[103,48]
self.esp8266.rotate(90)
self.mpu9250.at=[100,87]
self.mpu9250.rotate(270)
self.modulelist=[self.esp8266,self.mpu9250]
def build_netlist(self):
v33,v5,gnd=module.Net('3v3'),module.Net('VIN'),module.Net('GND')
self.nets=[v33,v5,gnd]
self.netclass=[pcb.NetClass('default',trace_width=1,nets=['3v3','VIN','GND'])]
self.esp8266.pads[0].net=v5
self.esp8266.pads[2].net = v33
self.mpu9250.pads[0].net = v33
def draw_pcb(self):
self.loaddxf=importer(self.dxf_name,'Edge.Cuts',0.1)
self.outlines=self.loaddxf.poly_class()
def pcb_collect(self):
layers = [
pcb.Layer('F.Cu'),
pcb.Layer('B.Cu'),
pcb.Layer('Edge.Cuts', type='user')
]
for layer in ['Mask', 'Paste', 'SilkS', 'CrtYd', 'Fab']:
for side in ['B', 'F']:
layers.append(pcb.Layer('%s.%s' % (side, layer), type='user'))
#Pcb(version, host, board_thickness, num_nets, num_no_connects, title, date, rev, company, comment1,
# comment2, comment3, comment4, page_type, portrait, setup, layers, nets, net_classes, modules,
# segments, vias, texts, lines, arcs, circles, polygons, curves, zones, targets, dimensions)
self.board=pcb.Pcb()
self.board.layers=layers
self.board.page_type=[500,300]
self.board.num_nets=5
self.board.net_classes+=self.netclass
self.board.nets+=self.nets
self.board.modules+=self.modulelist
self.board.polygons+=self.outlines
self.board.to_file(self.save_name)
lib_path='/home/jingyan/Documents/summer_intern_lemur/roco_electrical/libraries/kicad-ESP8266'
# net_generator=schematic(lib_path)
pcb_generator=pcb_editor(lib_path)
This diff is collapsed.
This diff is collapsed.
#!/usr/bin/env python3
"""
python 3.6.8
"""
import ezdxf
from pykicad import pcb
import numpy as np
class importer():
def __init__(self,dxf_file,layer,width=None,board=None):
self.dwg=ezdxf.readfile(dxf_file)
self.msp=self.dwg.modelspace()
self.layer=layer
self.width=width
if board!=None:
self.board=pcb.Pcb.from_file(board)
self.draw_pcb()
def all(self):
self.line_class()
self.poly_class()
def line_class(self):
startlist=[]
endlist=[]
line_list=[]
for e in self.msp.query('LINE'):
startlist.append(e.dxf.start[:2])
endlist.append(e.dxf.end[:2])
for i in range(len(startlist)):
l=pcb.GrLine(startlist[i],endlist[i],self.layer,self.width)
line_list.append(l)
return line_list
def poly_class(self):
pts_list=[]
ply_list=[]
for e in self.msp.query('LWPOLYLINE'):
pts_list.append(e.get_points())
for pts_set in pts_list:
p=pcb.GrPolygon(pts_set,self.layer,self.width)
ply_list.append(p)
return ply_list
def draw_pcb(self):
self.board.lines+=self.line_class()
self.board.polygons+=self.poly_class()
\ No newline at end of file
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment