项目作者: jvestman

项目描述 :
SKiDL Microcontroller Board Wizard
高级语言: Python
项目地址: git://github.com/jvestman/skimibowi.git
创建时间: 2019-08-19T15:05:31Z
项目社区:https://github.com/jvestman/skimibowi

开源协议:MIT License

下载


skimibowi - SKiDL Microcontroller Board Wizard

Python application

QT Wizard for creating SKiDL descriptions of microcontroller boards. Skimibowi creates Python programs that create KiCad netlists ready for PCB layout with Pcbnew.

Screenshot

When wizard generated Python program..

  1. #Generated by Swimibowi - SKiDL Microcontroller Board Wizard
  2. """Creates Kicad netlist file for a microcontroller board"""
  3. from skidl import Part, Net, generate_netlist, subcircuit
  4. def subcircuit_label(name):
  5. """Creates subcircuit label footprint"""
  6. Part('./library/Skimibowi.lib', 'Label', ref=" ", value=name,
  7. footprint=f"Skimibowi:label{len(name)}")
  8. def R(value):
  9. """Creates default resistor footprint"""
  10. return Part('Device', 'R', value=value, footprint='Resistor_SMD:R_1206_3216Metric')
  11. @subcircuit
  12. def generate_esp():
  13. """Generate ESP-module code to circuit"""
  14. subcircuit_label('esp')
  15. global U1
  16. U1 = Part('RF_Module', 'ESP-12E', footprint='RF_Module:ESP-12E')
  17. U1['VCC'] += Net.fetch('+3V')
  18. U1['GND'] += Net.fetch('GND')
  19. U1['EN'] & R('10k') & Net.fetch('+3V')
  20. U1['GPIO15'] & R('4k7') & Net.fetch('GND')
  21. U1['RST'] += Net.fetch('RST')
  22. U1['GPIO16'] += Net.fetch('RST')
  23. @subcircuit
  24. def generate_power_led():
  25. """Generate led connected to ESP GPI0 that is on after boot"""
  26. subcircuit_label('power_led')
  27. led = Part('Device', 'LED', footprint='LED_SMD:LED_1206_3216Metric')
  28. U1['GPIO0'] & (R('1k') & led & Net.fetch('+3V'))
  29. generate_power_led()
  30. # Generate button for pulling ESP RST pin to low (e.g. reset)
  31. sw_reset = Part('Switch', 'SW_Push', footprint="Button_Switch_SMD:SW_SPST_B3U-1000P")
  32. sw_reset[1] += Net.fetch('RST')
  33. sw_reset[2] += Net.fetch('GND')
  34. generate_esp()
  35. generate_netlist()

.. is executed with

  1. > python3 mcu.py

the following netlist is generated:

  1. (export (version D)
  2. (design
  3. (source "mcu.py")
  4. (date "02/02/2020 04:46 PM")
  5. (tool "SKiDL (0.0.28)"))
  6. (components
  7. (comp (ref " ")
  8. (value esp)
  9. (footprint Skimibowi:label3)
  10. (fields
  11. (field (name F0) _)
  12. (field (name F1) Label))
  13. (libsource (lib ./library/Skimibowi.lib) (part Label))
  14. (sheetpath (names /top/generate_esp0/6775841524177316650) (tstamps /top/generate_esp0/6775841524177316650)))
  15. (comp (ref " _1")
  16. (value power_led)
  17. (footprint Skimibowi:label9)
  18. (fields
  19. (field (name F0) _)
  20. (field (name F1) Label))
  21. (libsource (lib ./library/Skimibowi.lib) (part Label))
  22. (sheetpath (names /top/generate_esp0/generate_power_led0/14059041834838259427) (tstamps /top/generate_esp0/generate_power_led0/14059041834838259427)))
  23. (comp (ref D1)
  24. (value LED)
  25. (footprint LED_SMD:LED_1206_3216Metric)
  26. (fields
  27. (field (name datasheet) ~)
  28. (field (name F0) D)
  29. (field (name description) "Light emitting diode")
  30. (field (name F1) LED)
  31. (field (name keywords) "LED diode"))
  32. (libsource (lib Device) (part LED))
  33. (sheetpath (names /top/generate_esp0/generate_power_led0/9220504182991079147) (tstamps /top/generate_esp0/generate_power_led0/9220504182991079147)))
  34. (comp (ref R1)
  35. (value 10k)
  36. (footprint Resistor_SMD:R_1206_3216Metric)
  37. (fields
  38. (field (name datasheet) ~)
  39. (field (name F0) R)
  40. (field (name description) Resistor)
  41. (field (name F1) R)
  42. (field (name keywords) "R res resistor"))
  43. (libsource (lib Device) (part R))
  44. (sheetpath (names /top/generate_esp0/6393904598237148148) (tstamps /top/generate_esp0/6393904598237148148)))
  45. (comp (ref R2)
  46. (value 4k7)
  47. (footprint Resistor_SMD:R_1206_3216Metric)
  48. (fields
  49. (field (name datasheet) ~)
  50. (field (name F0) R)
  51. (field (name description) Resistor)
  52. (field (name F1) R)
  53. (field (name keywords) "R res resistor"))
  54. (libsource (lib Device) (part R))
  55. (sheetpath (names /top/generate_esp0/4087014578734036955) (tstamps /top/generate_esp0/4087014578734036955)))
  56. (comp (ref R3)
  57. (value 1k)
  58. (footprint Resistor_SMD:R_1206_3216Metric)
  59. (fields
  60. (field (name datasheet) ~)
  61. (field (name F0) R)
  62. (field (name description) Resistor)
  63. (field (name F1) R)
  64. (field (name keywords) "R res resistor"))
  65. (libsource (lib Device) (part R))
  66. (sheetpath (names /top/generate_esp0/generate_power_led0/9742915000343388170) (tstamps /top/generate_esp0/generate_power_led0/9742915000343388170)))
  67. (comp (ref SW1)
  68. (value SW_Push)
  69. (footprint Button_Switch_SMD:SW_SPST_B3U-1000P)
  70. (fields
  71. (field (name datasheet) ~)
  72. (field (name F0) SW)
  73. (field (name description) "Push button switch, generic, two pins")
  74. (field (name F1) SW_Push)
  75. (field (name keywords) "switch normally-open pushbutton push-button"))
  76. (libsource (lib Switch) (part SW_Push))
  77. (sheetpath (names /top/generate_esp0/4871690332137215268) (tstamps /top/generate_esp0/4871690332137215268)))
  78. (comp (ref U1)
  79. (value ESP-12E)
  80. (footprint RF_Module:ESP-12E)
  81. (fields
  82. (field (name datasheet) http://wiki.ai-thinker.com/_media/esp8266/esp8266_series_modules_user_manual_v1.1.pdf)
  83. (field (name F2) RF_Module:ESP-12E)
  84. (field (name F0) U)
  85. (field (name description) "802.11 b/g/n Wi-Fi Module")
  86. (field (name _aliases) ESP-12F)
  87. (field (name F1) ESP-12E)
  88. (field (name keywords) "802.11 Wi-Fi"))
  89. (libsource (lib RF_Module) (part ESP-12E))
  90. (sheetpath (names /top/generate_esp0/4769537156195853946) (tstamps /top/generate_esp0/4769537156195853946))))
  91. (nets
  92. (net (code 0) (name +3V)
  93. (node (ref D1) (pin 2))
  94. (node (ref R1) (pin 2))
  95. (node (ref U1) (pin 8)))
  96. (net (code 1) (name GND)
  97. (node (ref R2) (pin 2))
  98. (node (ref SW1) (pin 2))
  99. (node (ref U1) (pin 15)))
  100. (net (code 2) (name N$1)
  101. (node (ref R1) (pin 1))
  102. (node (ref U1) (pin 3)))
  103. (net (code 3) (name N$2)
  104. (node (ref R2) (pin 1))
  105. (node (ref U1) (pin 16)))
  106. (net (code 4) (name N$3)
  107. (node (ref D1) (pin 1))
  108. (node (ref R3) (pin 2)))
  109. (net (code 5) (name N$4)
  110. (node (ref R3) (pin 1))
  111. (node (ref U1) (pin 18)))
  112. (net (code 6) (name RST)
  113. (node (ref SW1) (pin 1))
  114. (node (ref U1) (pin 1))
  115. (node (ref U1) (pin 4))))
  116. )

..that can then be imported to Pcbnew:

Screenshot